mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-03 20:40:05 -05:00
ITS#6857 avoid overwriting be_flags of the underlying database
when setting up the chain overlay from slapd.conf
This commit is contained in:
parent
821d2616b5
commit
8359d5dcd9
1 changed files with 12 additions and 21 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue