Commit 3716245f authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

Issue#8511 - Update documentation and configs to correctly use multiprovider

parent a49b5536
......@@ -639,8 +639,8 @@ ldapexop
objectIdentifier
objectidentifier
deallocators
mirrormode
MirrorMode
multiprovider
MultiProvider
loopDetect
SIGHUP
authMethodNotSupported
......@@ -1543,7 +1543,7 @@ builtin
matcheduid
Locator
ldapmaster
olcMirrorMode
olcMultiProvider
libldap
refreshDeletes
aliasProblem
......
......@@ -86,7 +86,7 @@ server is moved to the head, so that it will be first contacted the next time
a connection needs be created.
This feature can be used to provide a form of load balancing when using
{{SECT: MirrorMode replication}}.
{{SECT: Mirror mode replication}}.
H3: Further Information
......
......@@ -435,7 +435,10 @@ replication scheme is vital in high-volume environments where a
single {{slapd}} installation just doesn't provide the necessary availability
or reliability. For extremely demanding environments where a
single point of failure is not acceptable, {{multi-provider}} replication
is also available. {{slapd}} includes support for {{LDAP Sync}}-based
is also available. With {{multi-provider}} replication two or more nodes can
accept write operations allowing for redundancy at the provider level.
{{slapd}} includes support for {{LDAP Sync}}-based
replication.
{{B:Proxy Cache}}: {{slapd}} can be configured as a caching
......
......@@ -87,7 +87,7 @@ type are:
.{{S: }}
+{{B: Start the server}}
Obviously this doesn't cater for any complicated deployments like {{SECT: MirrorMode}} or {{SECT: N-Way Multi-Provider}},
Obviously this doesn't cater for any complicated deployments like {{SECT: Mirror mode}} or {{SECT: N-Way Multi-Provider}},
but following the above sections and using either commercial support or community support should help. Also check the
{{SECT: Troubleshooting}} section.
......
......@@ -13,16 +13,17 @@ a {{master}} server and some number of {{slave}} servers. A master
accepted directory updates from other clients, and a slave only
accepted updates from a (single) master. The replication structure
was rigidly defined and any particular database could only fulfill
a single role, either master or slave.
a single role, either master or slave. Another historic term introduced
with OpenLDAP 2.4 was multimaster.
As OpenLDAP now supports a wide variety of replication topologies, these
terms have been deprecated in favor of {{provider}} and
{{consumer}}: A provider replicates directory updates to consumers;
consumers receive replication updates from providers. Unlike the
rigidly defined master/slave relationships, provider/consumer roles
are quite fluid: replication updates received in a consumer can be
further propagated by that consumer to other servers, so a consumer
can also act simultaneously as a provider. Also, a consumer need not
terms have been deprecated in favor of {{provider}}/{{multi-provider}} and
{{consumer}}: A provider can accept external write operations and make them
available for retrieval by consumers; consumers request replication updates from
providers. Unlike the rigidly defined master/slave relationships,
provider/consumer roles are quite fluid: replication updates received in a
consumer can be further propagated by that consumer to other servers, so a
consumer can also act simultaneously as a provider. Also, a consumer need not
be an actual LDAP server; it may be just an LDAP client.
The following sections will describe the replication technology and
......@@ -392,11 +393,11 @@ writes to the clients that are partitioned from the single provider
For configuration, please see the {{SECT:N-Way Multi-Provider}} section below
H3: MirrorMode replication
H3: Mirror mode replication
MirrorMode is a hybrid configuration that provides all of the consistency
Mirror mode is a hybrid configuration that provides all of the consistency
guarantees of single-provider replication, while also providing the high
availability of multi-provider. In MirrorMode two providers are set up to
availability of multi-provider. In Mirror mode two providers are set up to
replicate from each other (as a multi-provider configuration), but an
external frontend is employed to direct all writes to only one of
the two servers. The second provider will only be used for writes if
......@@ -405,7 +406,7 @@ directing all writes to the second provider. When a crashed provider is
repaired and restarted it will automatically catch up to any changes
on the running provider and resync.
H4: Arguments for MirrorMode
H4: Arguments for Mirror mode
* Provides a high-availability (HA) solution for directory writes (replicas handle reads)
* As long as one provider is operational, writes can safely be accepted
......@@ -414,16 +415,16 @@ can be ready to take over (hot standby)
* Syncrepl also allows the provider nodes to re-synchronize after any downtime
H4: Arguments against MirrorMode
H4: Arguments against Mirror mode
* MirrorMode is not what is termed as a Multi-Provider solution. This is because
* Mirror mode is not what is termed as a Multi-Provider solution. This is because
writes have to go to just one of the mirror nodes at a time
* MirrorMode can be termed as Active-Active Hot-Standby, therefore an external
* Mirror mode can be termed as Active-Active Hot-Standby, therefore an external
server (slapd in proxy mode) or device (hardware load balancer)
is needed to manage which provider is currently active
* Backups are managed slightly differently
For configuration, please see the {{SECT:MirrorMode}} section below
For configuration, please see the {{SECT:Mirror mode}} section below
H3: Syncrepl Proxy Mode
......@@ -432,7 +433,7 @@ While the LDAP Sync protocol supports both pull- and push-based replication,
the push mode (refreshAndPersist) must still be initiated from the consumer
before the provider can begin pushing changes. In some network configurations,
particularly where firewalls restrict the direction in which connections
can be made, a provider-initiated push mode may be needed.
can be made, a provider-initiated push mode may be needed.
This mode can be configured with the aid of the LDAP Backend
({{SECT: Backends}} and {{slapd-ldap(8)}}). Instead of running the
......@@ -789,8 +790,8 @@ Now we setup the first Provider Node (replace $URI1, $URI2 and $URI3 etc. with y
> credentials=secret searchbase="cn=config" type=refreshAndPersist
> retry="5 5 300 5" timeout=1
> -
> add: olcMirrorMode
> olcMirrorMode: TRUE
> add: olcMultiProvider
> olcMultiProvider: TRUE
Now start up the provider and a consumer/s, also add the above LDIF to the first consumer, second consumer etc. It will then replicate {{B:cn=config}}. You now have N-Way Multi-Provider on the config database.
......@@ -814,7 +815,7 @@ We still have to replicate the actual data, not just the config, so add to the p
> olcSyncRepl: rid=006 provider=$URI3 binddn="$MANAGERDN" bindmethod=simple
> credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
> interval=00:00:00:10 retry="5 5 300 5" timeout=1
> olcMirrorMode: TRUE
> olcMultiProvider: TRUE
>
> dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
> changetype: add
......@@ -831,15 +832,15 @@ directives are the URLs of the servers from which to replicate. These
must exactly match the URLs {{slapd}} listens on ({{-h}} in {{SECT:Command-Line Options}}).
Otherwise slapd may attempt to replicate from itself, causing a loop.
H3: MirrorMode
H3: Mirror mode
MirrorMode configuration is actually very easy. If you have ever setup a normal
Mirror mode configuration is actually very easy. If you have ever setup a normal
slapd syncrepl provider, then the only change is the following two directives:
> mirrormode on
> multiprovider on
> serverID 1
Note: You need to make sure that the {{serverID}} of each mirror node is
Note: You need to make sure that the {{serverID}} of each provider node is
different and add it as a global configuration option.
H4: Mirror Node Configuration
......@@ -850,45 +851,45 @@ The first step is to configure the syncrepl provider the same as in the
Here's a specific cut down example using {{SECT:LDAP Sync Replication}} in
{{refreshAndPersist}} mode:
MirrorMode node 1:
Mirror mode node 1:
> # Global section
> serverID 1
> # database section
>
> # syncrepl directive
> syncrepl rid=001
> provider=ldap://ldap-sid2.example.com
> bindmethod=simple
> binddn="cn=mirrormode,dc=example,dc=com"
> credentials=mirrormode
> searchbase="dc=example,dc=com"
> schemachecking=on
> type=refreshAndPersist
> retry="60 +"
> # syncrepl directive
> syncrepl rid=001
> provider=ldap://ldap-sid2.example.com
> bindmethod=simple
> binddn="cn=mirrormode,dc=example,dc=com"
> credentials=mirrormode
> searchbase="dc=example,dc=com"
> schemachecking=on
> type=refreshAndPersist
> retry="60 +"
>
> mirrormode on
> multiprovider on
MirrorMode node 2:
Mirror mode node 2:
> # Global section
> serverID 2
> # database section
>
> # syncrepl directive
> syncrepl rid=001
> provider=ldap://ldap-sid1.example.com
> bindmethod=simple
> binddn="cn=mirrormode,dc=example,dc=com"
> credentials=mirrormode
> searchbase="dc=example,dc=com"
> schemachecking=on
> type=refreshAndPersist
> retry="60 +"
>
> mirrormode on
It's simple really; each MirrorMode node is setup {{B:exactly}} the same, except
> # syncrepl directive
> syncrepl rid=001
> provider=ldap://ldap-sid1.example.com
> bindmethod=simple
> binddn="cn=mirrormode,dc=example,dc=com"
> credentials=mirrormode
> searchbase="dc=example,dc=com"
> schemachecking=on
> type=refreshAndPersist
> retry="60 +"
>
> multiprovider on
It's simple really; each Mirror mode node is setup {{B:exactly}} the same, except
that the {{serverID}} is unique, and each consumer is pointed to
the other server.
......@@ -899,8 +900,8 @@ dedicated proxy software, 2. using a Back-LDAP proxy as a syncrepl provider
A typical enterprise example might be:
!import "dual_dc.png"; align="center"; title="MirrorMode Enterprise Configuration"
FT[align="Center"] Figure X.Y: MirrorMode in a Dual Data Center Configuration
!import "dual_dc.png"; align="center"; title="Mirror mode Enterprise Configuration"
FT[align="Center"] Figure X.Y: Mirror mode in a Dual Data Center Configuration
H5: Normal Consumer Configuration
......@@ -908,7 +909,7 @@ This is exactly the same as the {{SECT:Set up the consumer slapd}} section. It
can either setup in normal {{SECT:syncrepl replication}} mode, or in
{{SECT:delta-syncrepl replication}} mode.
H4: MirrorMode Summary
H4: Mirror mode Summary
You will now have a directory architecture that provides all of the
consistency guarantees of single-provider replication, while also providing the
......
......@@ -5142,7 +5142,7 @@
x="96.974648"
y="113.75929"
style="font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:18px;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%" /></flowRegion><flowPara
id="flowPara27617">MirrorMode 1</flowPara></flowRoot> <flowRoot
id="flowPara27617">Mirror mode 1</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot27619"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial"
......@@ -5154,7 +5154,7 @@
x="96.974648"
y="113.75929"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
id="flowPara27627">MirrorMode 2</flowPara></flowRoot> <path
id="flowPara27627">Mirror mode 2</flowPara></flowRoot> <path
d="M 103.99577,648.52356 C 103.99577,648.52356 103.75488,628.78956 123.98963,634.70975 C 144.22438,640.62995 140.61103,650.49696 140.85192,650.49696 C 141.09281,650.49696 137.23858,638.37464 152.65553,636.11932 C 166.62714,637.52889 173.13117,640.62995 172.4085,651.06079 C 171.68583,661.49163 164.94091,664.02886 164.94091,664.02886 C 164.94091,664.02886 177.2263,665.43843 173.85384,686.58202 C 168.55426,701.24157 168.55426,699.832 156.26888,701.52349 C 150.72841,698.98626 150.48752,696.73094 150.48752,696.73094 C 150.48752,696.73094 160.60489,707.72561 145.42883,714.77347 C 128.32565,720.12985 126.15764,715.3373 118.93094,712.80007 C 111.94514,707.72561 113.39048,701.52349 113.39048,701.52349 C 113.39048,701.52349 117.7265,711.95432 103.03221,713.92773 C 88.337924,715.90113 82.797457,711.95432 80.147668,695.8852 C 79.424999,683.76287 92.433052,682.63522 92.433052,682.63522 C 92.433052,682.63522 84.483686,682.91713 82.315677,676.71501 C 80.147668,670.51289 78.702329,662.33737 85.206355,651.3427 C 97.25085,638.09272 105.44111,646.83207 103.99577,648.52356 z "
id="path1503"
sodipodi:nodetypes="cccccccccccccccccc"
......@@ -6805,6 +6805,6 @@
y="279.42432"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Arial" /></flowRegion><flowPara
id="flowPara3132">Each LB points to</flowPara><flowPara
id="flowPara3134">the same MirrorMode</flowPara><flowPara
id="flowPara3134">the same Mirror mode</flowPara><flowPara
id="flowPara3136">Node at any time.</flowPara></flowRoot> </g>
</svg>
......@@ -1623,8 +1623,8 @@ switch.
Specifies the maximum number of aliases to dereference when trying to
resolve an entry, used to avoid infinite alias loops. The default is 15.
.TP
.B olcMirrorMode: TRUE | FALSE
This option puts a consumer database into "mirror" mode. Update
.B olcMultiProvider: TRUE | FALSE
This option puts a consumer database into Multi-Provider mode. Update
operations will be accepted from any user, not just the updatedn. The
database must already be configured as syncrepl consumer
before this keyword may be set. This mode also requires a
......
......@@ -1566,14 +1566,14 @@ by means of the RFC 4533 LDAP Content Synchronization protocol
Specifies the maximum number of aliases to dereference when trying to
resolve an entry, used to avoid infinite alias loops. The default is 15.
.TP
.B mirrormode on | off
This option puts a consumer database into "mirror" mode. Update
.B multiprovider on | off
This option puts a consumer database into Multi-Provider mode. Update
operations will be accepted from any user, not just the updatedn. The
database must already be configured as a syncrepl consumer
before this keyword may be set. This mode also requires a
.B serverID
(see above) to be configured.
By default, mirrormode is off.
By default, multiprovider is off.
.TP
.B monitoring on | off
This option enables database-specific monitoring in the entry related
......
......@@ -184,7 +184,7 @@ enum {
CFG_SSTR_IF_MAX,
CFG_SSTR_IF_MIN,
CFG_TTHREADS,
CFG_MIRRORMODE,
CFG_MULTIPROVIDER,
CFG_HIDDEN,
CFG_MONITORING,
CFG_SERVERID,
......@@ -473,8 +473,8 @@ static ConfigTable config_back_cf_table[] = {
&config_generic, "( OLcfgDbAt:0.6 NAME 'olcMaxDerefDepth' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
{ "mirrormode", "on|off", 2, 2, 0, ARG_DB|ARG_ON_OFF|ARG_MAGIC|CFG_MIRRORMODE,
&config_generic, "( OLcfgDbAt:0.16 NAME 'olcMirrorMode' "
{ "multiprovider", "on|off", 2, 2, 0, ARG_DB|ARG_ON_OFF|ARG_MAGIC|CFG_MULTIPROVIDER,
&config_generic, "( OLcfgDbAt:0.16 NAME ( 'olcMultiProvider' 'olcMirrorMode' ) "
"EQUALITY booleanMatch "
"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
{ "moduleload", "file", 2, 0, 0,
......@@ -892,6 +892,9 @@ static ConfigTable config_back_cf_table[] = {
&global_writetimeout, "( OLcfgGlAt:88 NAME 'olcWriteTimeout' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger SINGLE-VALUE )", NULL, NULL },
/* Legacy keywords */
{ "mirrormode", "on|off", 2, 2, 0, ARG_DB|ARG_ON_OFF|ARG_MAGIC|CFG_MULTIPROVIDER,
&config_generic, NULL, NULL, NULL },
{ NULL, NULL, 0, 0, 0, ARG_IGNORED,
NULL, NULL, NULL, NULL }
};
......@@ -981,7 +984,7 @@ static ConfigOCs cf_ocs[] = {
"olcReplicaArgsFile $ olcReplicaPidFile $ olcReplicationInterval $ "
"olcReplogFile $ olcRequires $ olcRestrict $ olcRootDN $ olcRootPW $ "
"olcSchemaDN $ olcSecurity $ olcSizeLimit $ olcSyncUseSubentry $ olcSyncrepl $ "
"olcTimeLimit $ olcUpdateDN $ olcUpdateRef $ olcMirrorMode $ "
"olcTimeLimit $ olcUpdateDN $ olcUpdateRef $ olcMultiProvider $ "
"olcMonitoring $ olcExtraAttrs ) )",
Cft_Database, NULL, cfAddDatabase },
{ "( OLcfgGlOc:5 "
......@@ -1322,7 +1325,7 @@ config_generic(ConfigArgs *c) {
case CFG_SYNC_SUBENTRY:
c->value_int = (SLAP_SYNC_SUBENTRY(c->be) != 0);
break;
case CFG_MIRRORMODE:
case CFG_MULTIPROVIDER:
if ( SLAP_SHADOW(c->be))
c->value_int = (SLAP_MULTIPROVIDER(c->be) != 0);
else
......@@ -1429,7 +1432,7 @@ config_generic(ConfigArgs *c) {
snprintf(c->log, sizeof( c->log ), "change requires slapd restart");
break;
case CFG_MIRRORMODE:
case CFG_MULTIPROVIDER:
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_MULTI_SHADOW;
if(SLAP_SHADOW(c->be))
SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SINGLE_SHADOW;
......@@ -2270,7 +2273,7 @@ sortval_reject:
SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_LASTBIND;
break;
case CFG_MIRRORMODE:
case CFG_MULTIPROVIDER:
if(c->value_int && !SLAP_SHADOW(c->be)) {
snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> database is not a shadow",
c->argv[0] );
......
......@@ -6503,7 +6503,7 @@ add_syncrepl(
rc = -1;
}
} else {
/* mirrormode still needs to see this flag in tool mode */
/* multiprovider still needs to see this flag in tool mode */
rc = config_sync_shadow( c ) ? -1 : 0;
}
ldap_free_urldesc( lud );
......
......@@ -61,7 +61,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -61,7 +61,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI1@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -61,7 +61,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -61,7 +61,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -117,7 +117,7 @@ syncrepl
sizeLimit=unlimited
timelimit=unlimited
mirrormode TRUE
multiprovider TRUE
overlay syncprov
syncprov-sessionlog 100
......
......@@ -59,7 +59,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -59,7 +59,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI1@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -59,7 +59,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -59,7 +59,7 @@ olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: secret
olcSizeLimit: unlimited
olcTimeLimit: unlimited
olcMirrorMode: TRUE
olcMultiProvider: TRUE
olcSyncrepl: {0}rid=100 provider=@URI2@ binddn="cn=manager,dc=example,dc=com
" credentials=secret bindmethod=simple searchbase="dc=example,dc=com" logba
se="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))
......
......@@ -169,8 +169,8 @@ echo " retry=\"3 10 300 5\" timeout=3" >> $TMP
n=`expr $n + 1`
done
echo "-" >> $TMP
echo "add: olcMirrorMode" >> $TMP
echo "olcMirrorMode: TRUE" >> $TMP
echo "add: olcMultiProvider" >> $TMP
echo "olcMultiProvider: TRUE" >> $TMP
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF < $TMP >> $TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
......@@ -232,8 +232,8 @@ j=`expr $j + 1`
done
cat <<EOF >> $TMP
-
add: olcMirrorMode
olcMirrorMode: TRUE
add: olcMultiProvider
olcMultiProvider: TRUE
EOF
$LDAPMODIFY -D cn=config -H $URI -y $CONFIGPWF < $TMP >>$TESTOUT 2>&1
n=`expr $n + 1`
......@@ -296,7 +296,7 @@ n=`expr $n + 1`
done
cat <<EOF >> $TMP
olcMirrorMode: TRUE
olcMultiProvider: TRUE
dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
objectClass: olcOverlayConfig
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment