From b8f4e78414d59e76d626b3f0ae1c113ba1b1fc2c Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Mon, 7 Nov 2011 13:32:21 -0800 Subject: [PATCH] ITS#7077 preserve mirrorMode setting when deleting syncrepl --- servers/slapd/bconfig.c | 20 +++++++++++++++----- servers/slapd/slap.h | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index 6b7df2e346..2bd62c6d81 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -1123,7 +1123,7 @@ config_generic(ConfigArgs *c) { break; case CFG_MIRRORMODE: if ( SLAP_SHADOW(c->be)) - c->value_int = (SLAP_SINGLE_SHADOW(c->be) == 0); + c->value_int = (SLAP_MULTIMASTER(c->be) != 0); else rc = 1; break; @@ -1228,7 +1228,6 @@ config_generic(ConfigArgs *c) { case CFG_AZPOLICY: case CFG_DEPTH: case CFG_LASTMOD: - case CFG_MIRRORMODE: case CFG_MONITORING: case CFG_SASLSECP: case CFG_SSTR_IF_MAX: @@ -1245,6 +1244,12 @@ config_generic(ConfigArgs *c) { snprintf(c->log, sizeof( c->log ), "change requires slapd restart"); break; + case CFG_MIRRORMODE: + SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MULTI_SHADOW; + if(SLAP_SHADOW(c->be)) + SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW; + break; + case CFG_SALT: ch_free( passwd_salt ); passwd_salt = NULL; @@ -1947,10 +1952,13 @@ sortval_reject: c->log, c->cr_msg, 0 ); return(1); } - if(c->value_int) + if(c->value_int) { SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_SINGLE_SHADOW; - else + SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_MULTI_SHADOW; + } else { SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW; + SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MULTI_SHADOW; + } break; case CFG_MONITORING: @@ -3662,7 +3670,9 @@ config_shadow( ConfigArgs *c, slap_mask_t flag ) } } else { - SLAP_DBFLAGS(c->be) |= (SLAP_DBFLAG_SHADOW | SLAP_DBFLAG_SINGLE_SHADOW | flag); + SLAP_DBFLAGS(c->be) |= (SLAP_DBFLAG_SHADOW | flag); + if ( !SLAP_MULTIMASTER( c->be )) + SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW; } return 0; diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index cceef33947..b0f35e569f 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1850,6 +1850,7 @@ struct BackendDB { #define SLAP_DBFLAG_CLEAN 0x10000U /* was cleanly shutdown */ #define SLAP_DBFLAG_ACL_ADD 0x20000U /* check attr ACLs on adds */ #define SLAP_DBFLAG_SYNC_SUBENTRY 0x40000U /* use subentry for context */ +#define SLAP_DBFLAG_MULTI_SHADOW 0x80000U /* uses mirrorMode/multi-master */ slap_mask_t be_flags; #define SLAP_DBFLAGS(be) ((be)->be_flags) #define SLAP_NOLASTMOD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_NOLASTMOD) @@ -1873,7 +1874,7 @@ struct BackendDB { #define SLAP_SYNC_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SHADOW) #define SLAP_SLURP_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SLURP_SHADOW) #define SLAP_SINGLE_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SINGLE_SHADOW) -#define SLAP_MULTIMASTER(be) (!SLAP_SINGLE_SHADOW(be)) +#define SLAP_MULTIMASTER(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_MULTI_SHADOW) #define SLAP_DBCLEAN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_CLEAN) #define SLAP_DBACL_ADD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ACL_ADD) #define SLAP_SYNC_SUBENTRY(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SUBENTRY) -- 2.39.2