From: Pierangelo Masarati Date: Sun, 12 Oct 2008 20:20:46 +0000 (+0000) Subject: fix overlays with private instances of databases (ITS#5736) X-Git-Tag: ACLCHECK_0~1268 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=1421d522ad0d6c866d3b785e2b2030c8a682bb50;p=openldap fix overlays with private instances of databases (ITS#5736) --- diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index 32783ed0a9..ffdf61fe5c 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -63,6 +63,7 @@ typedef enum { LDAP_CH_RES, LDAP_CH_ERR } ldap_chain_status_t; + static BackendInfo *lback; typedef struct ldap_chain_t { @@ -1096,7 +1097,7 @@ static ConfigOCs chainocs[] = { "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 @@ chain_ldadd( CfEntryInfo *p, Entry *e, ConfigArgs *ca ) } } + ca->ca_private = on; + done:; if ( rc != LDAP_SUCCESS ) { (void)ldap_chain_db_destroy_one( ca->be, NULL ); @@ -1510,17 +1513,11 @@ ldap_chain_db_init( 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 @@ ldap_chain_parse_ctrl( 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 ); diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c index ec98abc7bc..eb7c218b48 100644 --- a/servers/slapd/back-monitor/database.c +++ b/servers/slapd/back-monitor/database.c @@ -160,12 +160,12 @@ monitor_subsys_database_init_one( "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 ); diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index 8d00224b0f..f50fb6d75a 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -696,6 +696,15 @@ static ConfigTable config_back_cf_table[] = { 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; @@ -6475,6 +6484,9 @@ config_back_initialize( BackendInfo *bi ) 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 ); diff --git a/servers/slapd/config.h b/servers/slapd/config.h index 8da8b6e1bb..7d91c7c2ff 100644 --- a/servers/slapd/config.h +++ b/servers/slapd/config.h @@ -201,6 +201,8 @@ int config_shadow( ConfigArgs *c, int flag ); 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 */ diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c index 450290fcc3..40ac4b99ed 100644 --- a/servers/slapd/overlays/pcache.c +++ b/servers/slapd/overlays/pcache.c @@ -2655,15 +2655,6 @@ static ConfigTable pccfg[] = { { 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 @@ static ConfigOCs pcocs[] = { { "( 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 @@ pcache_initialize() 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 ); } diff --git a/servers/slapd/overlays/translucent.c b/servers/slapd/overlays/translucent.c index 75b2d2012e..70d763f11e 100644 --- a/servers/slapd/overlays/translucent.c +++ b/servers/slapd/overlays/translucent.c @@ -95,14 +95,6 @@ static ConfigTable translucentcfg[] = { { 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 @@ static ConfigOCs translucentocs[] = { { "( 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() */