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
This commit is contained in:
Rob Crittenden
2011-02-08 22:24:54 -05:00
parent c187b276ad
commit b77046d550
4 changed files with 29 additions and 2 deletions

View File

@@ -7,7 +7,7 @@ cn: IPA Version Replication
nsslapd-pluginpath: libipa_repl_version nsslapd-pluginpath: libipa_repl_version
nsslapd-plugininitfunc: repl_version_plugin_init nsslapd-plugininitfunc: repl_version_plugin_init
nsslapd-plugintype: preoperation nsslapd-plugintype: preoperation
nsslapd-pluginenabled: on nsslapd-pluginenabled: off
nsslapd-pluginid: ipa_repl_version nsslapd-pluginid: ipa_repl_version
nsslapd-pluginversion: 1.0 nsslapd-pluginversion: 1.0
nsslapd-pluginvendor: Red Hat, Inc. nsslapd-pluginvendor: Red Hat, Inc.

View File

@@ -29,7 +29,7 @@ from optparse import OptionParser
from ipapython import ipautil from ipapython import ipautil
from ipaserver.install import bindinstance, dsinstance, installutils, certs 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.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 ipaserver.plugins.ldap2 import ldap2
from ipapython import version from ipapython import version
from ipalib import api, errors, util from ipalib import api, errors, util
@@ -296,6 +296,8 @@ def main():
sys.exit("\nUnable to connect to LDAP server %s" % api.env.host) sys.exit("\nUnable to connect to LDAP server %s" % api.env.host)
print "Preparing replica for %s from %s" % (replica_fqdn, 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)) subject_base = get_subject_base(api.env.host, dirman_password, util.realm_to_suffix(api.env.realm))

View File

@@ -289,6 +289,10 @@ class DsInstance(service.Service):
def __setup_replica(self): def __setup_replica(self):
replication.enable_replication_version_checking(self.fqdn,
self.realm_name,
self.dm_password)
repl = replication.ReplicationManager(self.realm_name, repl = replication.ReplicationManager(self.realm_name,
self.fqdn, self.fqdn,
self.dm_password) self.dm_password)

View File

@@ -22,6 +22,7 @@ import time, logging
import os import os
import ldap import ldap
from ipaserver import ipaldap from ipaserver import ipaldap
from ipaserver.install.service import restart
from ldap import modlist from ldap import modlist
from ipalib import util from ipalib import util
from ipalib import errors from ipalib import errors
@@ -53,6 +54,26 @@ def check_replication_plugin():
return True 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: class ReplicationManager:
"""Manage replication agreements between DS servers, and sync """Manage replication agreements between DS servers, and sync
agreements with Windows servers""" agreements with Windows servers"""