From 6db737931822c188833dee8cd086f91c640710fd Mon Sep 17 00:00:00 2001 From: Felipe Barreto Date: Mon, 15 Jan 2018 17:12:15 -0200 Subject: [PATCH] Check if replication agreement exist before enable/disable it If the replication agreement does not exist, a custom exception is raised explaining the problem. https://pagure.io/freeipa/issue/7201 Reviewed-By: Rob Crittenden Reviewed-By: Christian Heimes --- install/tools/ipa-replica-manage | 7 +++++-- ipaserver/install/replication.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/install/tools/ipa-replica-manage b/install/tools/ipa-replica-manage index c00d8ca3a0fa8228c5aa782a270991f14ee16974..019826f822b23e4e55dedb794ff6c1459a3d93c8 100755 --- a/install/tools/ipa-replica-manage +++ b/install/tools/ipa-replica-manage @@ -1200,8 +1200,11 @@ def re_initialize(realm, thishost, fromhost, dirman_passwd, nolookup=False): repl = replication.ReplicationManager(realm, fromhost, dirman_passwd) agreement = repl.get_replication_agreement(thishost) - thisrepl.enable_agreement(fromhost) - repl.enable_agreement(thishost) + try: + thisrepl.enable_agreement(fromhost) + repl.enable_agreement(thishost) + except errors.NotFound as e: + sys.exit(e) repl.force_sync(repl.conn, thishost) diff --git a/ipaserver/install/replication.py b/ipaserver/install/replication.py index 3a76b70038bf6f739fe63aeac0233ccbfda2f016..d4b41caa45409fa1537ae10f182599307f3e0439 100644 --- a/ipaserver/install/replication.py +++ b/ipaserver/install/replication.py @@ -31,6 +31,7 @@ import ldap from ipalib import api, errors from ipalib.cli import textui from ipapython.ipa_log_manager import root_logger +from ipalib.text import _ from ipapython import ipautil, ipaldap, kerberos from ipapython.admintool import ScriptError from ipapython.dn import DN @@ -1599,6 +1600,11 @@ class ReplicationManager(object): Disable the replication agreement to hostname. """ entry = self.get_replication_agreement(hostname) + if not entry: + raise errors.NotFound(reason=_( + "Replication agreement for %(hostname)s not found") % { + 'hostname': hostname + }) entry['nsds5ReplicaEnabled'] = 'off' try: @@ -1613,6 +1619,11 @@ class ReplicationManager(object): Note: for replication to work it needs to be enabled both ways. """ entry = self.get_replication_agreement(hostname) + if not entry: + raise errors.NotFound(reason=_( + "Replication agreement for %(hostname)s not found") % { + 'hostname': hostname + }) entry['nsds5ReplicaEnabled'] = 'on' try: -- 2.17.1