summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2011-02-08 22:24:54 -0500
committerRob Crittenden <rcritten@redhat.com>2011-02-10 13:54:39 -0500
commitb77046d55089f52a060128bf6d78a5e7fe9161fd (patch)
tree64a8ad1b6f59cc5d0ec549a6acdc9472221bd1fd
parentc187b276ad60e06be260899889628b7979f267e4 (diff)
downloadfreeipa-b77046d55089f52a060128bf6d78a5e7fe9161fd.tar.gz
freeipa-b77046d55089f52a060128bf6d78a5e7fe9161fd.tar.xz
freeipa-b77046d55089f52a060128bf6d78a5e7fe9161fd.zip
Disable replication version plugin by default.
The 389-ds replication plugin may not be installed on all platforms and our replication version plugin will cause 389-ds to not start if it is loaded and the replication plugin is not. So disable by default. When a replica is prepared we check for the replication plugin. If it exists we will enable the replication version plugin. Likewise on installation of a replica we check for existence of the repliation plugin and if it is there then we enable the version plugin before replication begins. ticket 918
-rw-r--r--daemons/ipa-slapi-plugins/ipa-version/version-conf.ldif2
-rwxr-xr-xinstall/tools/ipa-replica-prepare4
-rw-r--r--ipaserver/install/dsinstance.py4
-rw-r--r--ipaserver/install/replication.py21
4 files changed, 29 insertions, 2 deletions
diff --git a/daemons/ipa-slapi-plugins/ipa-version/version-conf.ldif b/daemons/ipa-slapi-plugins/ipa-version/version-conf.ldif
index 99e43597a..11558834c 100644
--- a/daemons/ipa-slapi-plugins/ipa-version/version-conf.ldif
+++ b/daemons/ipa-slapi-plugins/ipa-version/version-conf.ldif
@@ -7,7 +7,7 @@ cn: IPA Version Replication
nsslapd-pluginpath: libipa_repl_version
nsslapd-plugininitfunc: repl_version_plugin_init
nsslapd-plugintype: preoperation
-nsslapd-pluginenabled: on
+nsslapd-pluginenabled: off
nsslapd-pluginid: ipa_repl_version
nsslapd-pluginversion: 1.0
nsslapd-pluginvendor: Red Hat, Inc.
diff --git a/install/tools/ipa-replica-prepare b/install/tools/ipa-replica-prepare
index aaa1f2dc6..1b643099e 100755
--- a/install/tools/ipa-replica-prepare
+++ b/install/tools/ipa-replica-prepare
@@ -29,7 +29,7 @@ from optparse import OptionParser
from ipapython import ipautil
from ipaserver.install import bindinstance, dsinstance, installutils, certs
from ipaserver.install.bindinstance import add_zone, add_reverse_zone, add_rr, add_ptr_rr
-from ipaserver.install.replication import check_replication_plugin
+from ipaserver.install.replication import check_replication_plugin, enable_replication_version_checking
from ipaserver.plugins.ldap2 import ldap2
from ipapython import version
from ipalib import api, errors, util
@@ -296,6 +296,8 @@ def main():
sys.exit("\nUnable to connect to LDAP server %s" % api.env.host)
print "Preparing replica for %s from %s" % (replica_fqdn, api.env.host)
+ enable_replication_version_checking(api.env.host, api.env.realm,
+ dirman_password)
subject_base = get_subject_base(api.env.host, dirman_password, util.realm_to_suffix(api.env.realm))
diff --git a/ipaserver/install/dsinstance.py b/ipaserver/install/dsinstance.py
index be6b50483..2544e167b 100644
--- a/ipaserver/install/dsinstance.py
+++ b/ipaserver/install/dsinstance.py
@@ -289,6 +289,10 @@ class DsInstance(service.Service):
def __setup_replica(self):
+ replication.enable_replication_version_checking(self.fqdn,
+ self.realm_name,
+ self.dm_password)
+
repl = replication.ReplicationManager(self.realm_name,
self.fqdn,
self.dm_password)
diff --git a/ipaserver/install/replication.py b/ipaserver/install/replication.py
index ac35db1a2..0bf0e218a 100644
--- a/ipaserver/install/replication.py
+++ b/ipaserver/install/replication.py
@@ -22,6 +22,7 @@ import time, logging
import os
import ldap
from ipaserver import ipaldap
+from ipaserver.install.service import restart
from ldap import modlist
from ipalib import util
from ipalib import errors
@@ -53,6 +54,26 @@ def check_replication_plugin():
return True
+def enable_replication_version_checking(hostname, realm, dirman_passwd):
+ """
+ Check the replication version checking plugin. If it is not
+ enabled then enable it and restart 389-ds. If it is enabled
+ the do nothing.
+ """
+ conn = ipaldap.IPAdmin(hostname, port=PORT, cacert=CACERT)
+ if dirman_passwd:
+ conn.do_simple_bind(bindpw=dirman_passwd)
+ else:
+ conn.sasl_interactive_bind_s('', SASL_AUTH)
+ entry = conn.search_s('cn=IPA Version Replication,cn=plugins,cn=config', ldap.SCOPE_BASE, 'objectclass=*')
+ if entry[0].getValue('nsslapd-pluginenabled') == 'off':
+ conn.modify_s(entry[0].dn, [(ldap.MOD_REPLACE, 'nsslapd-pluginenabled', 'on')])
+ conn.unbind()
+ serverid = "-".join(realm.split("."))
+ restart("dirsrv", instance_name=serverid)
+ else:
+ conn.unbind()
+
class ReplicationManager:
"""Manage replication agreements between DS servers, and sync
agreements with Windows servers"""