diff --git a/CHANGES b/CHANGES
index 127433263189e1f8fa4fc13de43083f12d35b0aa..b33c397ec08f382ab2dc27dc932dca7b40c22048 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,7 @@ OpenLDAP 2.4.25 Engineering
 	Added slapd ordering for uidNumber and gidNumber (ITS#6852)
 	Fixed slapd sortval handling (ITS#6845)
 	Fixed slapd-ldap chain cn=config support (ITS#6837)
+	Fixed slapd-ldap chain with slapd.conf (ITS#6857)
 	Fixed slapd-meta deadlock (ITS#6846)
 	Fixed slapo-sssvlv with multiple requests (ITS#6850)
 	Build Environment
diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c
index f9e3ac157c8c8a003f82e08e068a522e7e7f5b3b..1e8c665fdee2b15dd19c33d0995816d36ee4c2b4 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;
 }