Index: servers/slapd/overlays/translucent.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/translucent.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- servers/slapd/overlays/translucent.c 6 Oct 2008 23:59:52 -0000 1.54 +++ servers/slapd/overlays/translucent.c 12 Oct 2008 18:20:47 -0000 1.55 @@ -95,14 +95,6 @@ { NULL, NULL, 0, 0, 0, ARG_IGNORED } }; -static ConfigTable transdummy[] = { - { "", "", 0, 0, 0, ARG_IGNORED, - NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' " - "DESC 'The backend type for a database instance' " - "SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL }, - { NULL, NULL, 0, 0, 0, ARG_IGNORED } -}; - static ConfigOCs translucentocs[] = { { "( OLcfgOvOc:14.1 " "NAME 'olcTranslucentConfig' " @@ -115,7 +107,7 @@ { "( OLcfgOvOc:14.2 " "NAME 'olcTranslucentDatabase' " "DESC 'Translucent target database configuration' " - "AUXILIARY )", Cft_Misc, transdummy, translucent_ldadd }, + "AUXILIARY )", Cft_Misc, olcDatabaseDummy, translucent_ldadd }, { NULL, 0, NULL } }; /* for translucent_init() */ Index: servers/slapd/overlays/pcache.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/overlays/pcache.c,v retrieving revision 1.153 retrieving revision 1.154 diff -u -r1.153 -r1.154 --- servers/slapd/overlays/pcache.c 4 Sep 2008 05:43:19 -0000 1.153 +++ servers/slapd/overlays/pcache.c 12 Oct 2008 18:20:47 -0000 1.154 @@ -2655,15 +2655,6 @@ { NULL, NULL, 0, 0, 0, ARG_IGNORED } }; -/* Need to no-op this keyword for dynamic config */ -static ConfigTable pcdummy[] = { - { "", "", 0, 0, 0, ARG_IGNORED, - NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' " - "DESC 'The backend type for a database instance' " - "SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL }, - { NULL, NULL, 0, 0, 0, ARG_IGNORED } -}; - static ConfigOCs pcocs[] = { { "( OLcfgOvOc:2.1 " "NAME 'olcPcacheConfig' " @@ -2675,7 +2666,7 @@ { "( OLcfgOvOc:2.2 " "NAME 'olcPcacheDatabase' " "DESC 'Cache database configuration' " - "AUXILIARY )", Cft_Misc, pcdummy, pc_ldadd }, + "AUXILIARY )", Cft_Misc, olcDatabaseDummy, pc_ldadd }, { NULL, 0, NULL } }; @@ -3995,11 +3986,6 @@ code = config_register_schema( pccfg, pcocs ); if ( code ) return code; - { - const char *text; - code = slap_str2ad( "olcDatabase", &pcdummy[0].ad, &text ); - if ( code ) return code; - } return overlay_register( &pcache ); } Index: servers/slapd/back-monitor/database.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/back-monitor/database.c,v retrieving revision 1.97 retrieving revision 1.98 diff -u -r1.97 -r1.98 --- servers/slapd/back-monitor/database.c 26 May 2008 18:53:16 -0000 1.97 +++ servers/slapd/back-monitor/database.c 12 Oct 2008 18:20:46 -0000 1.98 @@ -160,12 +160,12 @@ "monitor_subsys_database_init: " "missing suffix for %s\n", rdnval, 0, 0 ); - return -1; - } - attr_merge( e, slap_schema.si_ad_namingContexts, + } else { + attr_merge( e, slap_schema.si_ad_namingContexts, be->be_suffix, be->be_nsuffix ); - attr_merge( e_database, slap_schema.si_ad_namingContexts, + attr_merge( e_database, slap_schema.si_ad_namingContexts, be->be_suffix, be->be_nsuffix ); + } } (void)init_readOnly( mi, e, be->be_restrictops ); Index: servers/slapd/back-ldap/chain.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/back-ldap/chain.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -r1.69 -r1.70 --- servers/slapd/back-ldap/chain.c 7 Jan 2008 23:20:11 -0000 1.69 +++ servers/slapd/back-ldap/chain.c 12 Oct 2008 18:20:46 -0000 1.70 @@ -63,6 +63,7 @@ LDAP_CH_RES, LDAP_CH_ERR } ldap_chain_status_t; + static BackendInfo *lback; typedef struct ldap_chain_t { @@ -1096,7 +1097,7 @@ "NAME 'olcChainDatabase' " "DESC 'Chain remote server configuration' " "AUXILIARY )", - Cft_Misc, chaincfg, chain_ldadd }, + Cft_Misc, olcDatabaseDummy, chain_ldadd }, { NULL, 0, NULL } }; @@ -1187,6 +1188,8 @@ } } + ca->ca_private = on; + done:; if ( rc != LDAP_SUCCESS ) { (void)ldap_chain_db_destroy_one( ca->be, NULL ); @@ -1510,17 +1513,11 @@ ldap_chain_t *lc = NULL; if ( lback == NULL ) { - static BackendInfo lback2; - lback = backend_info( "ldap" ); if ( lback == NULL ) { return 1; } - - lback2 = *lback; - lback2.bi_type = ldapchain.on_bi.bi_type; - lback = &lback2; } lc = ch_malloc( sizeof( ldap_chain_t ) ); @@ -2062,7 +2059,8 @@ int chain_initialize( void ) { - int rc; + int rc; + const char *text; /* Make sure we don't exceed the bits reserved for userland */ config_check_userland( CH_LAST ); Index: servers/slapd/config.h =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/config.h,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- servers/slapd/config.h 18 Feb 2008 22:11:12 -0000 1.50 +++ servers/slapd/config.h 12 Oct 2008 18:20:46 -0000 1.51 @@ -201,6 +201,8 @@ extern slap_verbmasks *slap_ldap_response_code; extern int slap_ldap_response_code_register( struct berval *bv, int err ); +extern ConfigTable olcDatabaseDummy[]; + LDAP_END_DECL #endif /* CONFIG_H */ Index: servers/slapd/bconfig.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/bconfig.c,v retrieving revision 1.348 retrieving revision 1.350 diff -u -r1.348 -r1.350 --- servers/slapd/bconfig.c 29 Sep 2008 20:08:29 -0000 1.348 +++ servers/slapd/bconfig.c 12 Oct 2008 18:20:46 -0000 1.350 @@ -696,6 +696,15 @@ NULL, NULL, NULL, NULL } }; +/* Need to no-op this keyword for dynamic config */ +ConfigTable olcDatabaseDummy[] = { + { "", "", 0, 0, 0, ARG_IGNORED, + NULL, "( OLcfgGlAt:13 NAME 'olcDatabase' " + "DESC 'The backend type for a database instance' " + "SUP olcBackend SINGLE-VALUE X-ORDERED 'SIBLINGS' )", NULL, NULL }, + { NULL, NULL, 0, 0, 0, ARG_IGNORED } +}; + /* Routines to check if a child can be added to this type */ static ConfigLDAPadd cfAddSchema, cfAddInclude, cfAddDatabase, cfAddBackend, cfAddModule, cfAddOverlay; @@ -3253,7 +3262,7 @@ ConfigArgs *ca; Entry *frontend; Entry *config; - int got_frontend; + int got_frontend; int got_config; } setup_cookie; @@ -3262,15 +3271,18 @@ { if ( rs->sr_type == REP_SEARCH ) { setup_cookie *sc = op->o_callback->sc_private; + struct berval pdn; sc->cfb->cb_got_ldif = 1; /* Does the frontend exist? */ if ( !sc->got_frontend ) { if ( !strncmp( rs->sr_entry->e_nname.bv_val, - "olcDatabase", STRLENOF( "olcDatabase" ))) { + "olcDatabase", STRLENOF( "olcDatabase" ))) + { if ( strncmp( rs->sr_entry->e_nname.bv_val + STRLENOF( "olcDatabase" ), "={-1}frontend", - STRLENOF( "={-1}frontend" ))) { + STRLENOF( "={-1}frontend" ))) + { struct berval rdn; int i = op->o_noop; sc->ca->be = frontendDB; @@ -3293,13 +3305,19 @@ } } } + + dnParent( &rs->sr_entry->e_nname, &pdn ); + /* Does the configDB exist? */ if ( sc->got_frontend && !sc->got_config && !strncmp( rs->sr_entry->e_nname.bv_val, - "olcDatabase", STRLENOF( "olcDatabase" ))) { + "olcDatabase", STRLENOF( "olcDatabase" )) && + dn_match( &config_rdn, &pdn ) ) + { if ( strncmp( rs->sr_entry->e_nname.bv_val + STRLENOF( "olcDatabase" ), "={0}config", - STRLENOF( "={0}config" ))) { + STRLENOF( "={0}config" ))) + { struct berval rdn; int i = op->o_noop; sc->ca->be = LDAP_STAILQ_FIRST( &backendDB ); @@ -6466,6 +6484,9 @@ i = config_register_schema( ct, cf_ocs ); if ( i ) return i; + i = slap_str2ad( "olcDatabase", &olcDatabaseDummy[0].ad, &text ); + if ( i ) return i; + /* setup olcRootPW to be base64-encoded when written in LDIF form; * basically, we don't care if it fails */ i = slap_str2ad( "olcRootPW", &ad, &text );