From 8359d5dcd9a6d5ebc6c5bd92519752400117d00a Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Mon, 7 Mar 2011 16:55:57 +0000 Subject: [PATCH] ITS#6857 avoid overwriting be_flags of the underlying database when setting up the chain overlay from slapd.conf --- servers/slapd/back-ldap/chain.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index a55d93c2fe..f1f662ea89 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -1721,20 +1721,17 @@ ldap_chain_db_config( ldap_chain_t *lc = (ldap_chain_t *)on->on_bi.bi_private; int rc = SLAP_CONF_UNKNOWN; - + if ( lc->lc_common_li == NULL ) { - void *be_private = be->be_private; - ldap_chain_db_init_common( be ); - lc->lc_common_li = lc->lc_cfg_li = (ldapinfo_t *)be->be_private; - be->be_private = be_private; + BackendDB db = *be; + ldap_chain_db_init_common( &db ); + lc->lc_common_li = lc->lc_cfg_li = (ldapinfo_t *)db.be_private; } /* Something for the chain database? */ if ( strncasecmp( argv[ 0 ], "chain-", STRLENOF( "chain-" ) ) == 0 ) { char *save_argv0 = argv[ 0 ]; - BackendInfo *bd_info = be->bd_info; - void *be_private = be->be_private; - ConfigOCs *be_cf_ocs = be->be_cf_ocs; + BackendDB db = *be; static char *allowed_argv[] = { /* special: put URI here, so in the meanwhile * it detects whether a new URI is being provided */ @@ -1773,14 +1770,14 @@ ldap_chain_db_config( } if ( which_argv == 0 ) { - rc = ldap_chain_db_init_one( be ); + rc = ldap_chain_db_init_one( &db ); if ( rc != 0 ) { Debug( LDAP_DEBUG_ANY, "%s: line %d: " "underlying slapd-ldap initialization failed.\n.", fname, lineno, 0 ); return 1; } - lc->lc_cfg_li = be->be_private; + lc->lc_cfg_li = db.be_private; } /* TODO: add checks on what other slapd-ldap(5) args @@ -1790,27 +1787,21 @@ ldap_chain_db_config( * be warned. */ - be->bd_info = lback; - be->be_private = (void *)lc->lc_cfg_li; - be->be_cf_ocs = lback->bi_cf_ocs; + db.bd_info = lback; + db.be_private = (void *)lc->lc_cfg_li; + db.be_cf_ocs = lback->bi_cf_ocs; - rc = config_generic_wrapper( be, fname, lineno, argc, argv ); + rc = config_generic_wrapper( &db, fname, lineno, argc, argv ); argv[ 0 ] = save_argv0; - be->be_cf_ocs = be_cf_ocs; - be->be_private = be_private; - be->bd_info = bd_info; if ( which_argv == 0 ) { private_destroy:; if ( rc != 0 ) { - BackendDB db = *be; - db.bd_info = lback; db.be_private = (void *)lc->lc_cfg_li; ldap_chain_db_destroy_one( &db, NULL ); lc->lc_cfg_li = NULL; - } else { if ( lc->lc_cfg_li->li_bvuri == NULL || BER_BVISNULL( &lc->lc_cfg_li->li_bvuri[ 0 ] ) @@ -1836,7 +1827,7 @@ private_destroy:; } } } - + return rc; } -- 2.39.5