URL: https://github.com/freeipa/freeipa/pull/1410
Author: tiran
 Title: #1410: Custodia uninstall: Don't fail when LDAP is down
Action: opened

PR body:
"""
The Custodia instance is removed when LDAP is already shut down. Don't
fail and only remove the key files from disk. The server_del command
takes care of all Custodia keys in LDAP.

https://pagure.io/freeipa/issue/7318

Signed-off-by: Christian Heimes <chei...@redhat.com>
"""

To pull the PR as Git branch:
git remote add ghfreeipa https://github.com/freeipa/freeipa
git fetch ghfreeipa pull/1410/head:pr1410
git checkout pr1410
From 1d1587851062591bc6d25b89f3de134b12bd7900 Mon Sep 17 00:00:00 2001
From: Christian Heimes <chei...@redhat.com>
Date: Mon, 18 Dec 2017 13:52:10 +0100
Subject: [PATCH] Custodia uninstall: Don't fail when LDAP is down

The Custodia instance is removed when LDAP is already shut down. Don't
fail and only remove the key files from disk. The server_del command
takes care of all Custodia keys in LDAP.

https://pagure.io/freeipa/issue/7318

Signed-off-by: Christian Heimes <chei...@redhat.com>
---
 ipaserver/install/cainstance.py       |  9 ++++++++-
 ipaserver/install/custodiainstance.py | 10 +++++++++-
 ipaserver/secrets/kem.py              | 15 ++++++++++-----
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/ipaserver/install/cainstance.py b/ipaserver/install/cainstance.py
index 3176742e00..14c6ed6ebe 100644
--- a/ipaserver/install/cainstance.py
+++ b/ipaserver/install/cainstance.py
@@ -1304,7 +1304,14 @@ def __remove_lightweight_ca_key_retrieval_custodia(self):
         keyfile = os.path.join(paths.PKI_TOMCAT,
                                self.service_prefix + '.keys')
         keystore = IPAKEMKeys({'server_keys': keyfile})
-        keystore.remove_keys(self.service_prefix)
+        keystore.remove_server_keys_file()
+        try:
+            keystore.remove_keys(self.service_prefix)
+        except ldap.CONNECT_ERROR:
+            logger.debug(
+                "Cannot remove custodia keys now, server_del takes care of "
+                "them later."
+            )
 
     def add_lightweight_ca_tracking_requests(self):
         try:
diff --git a/ipaserver/install/custodiainstance.py b/ipaserver/install/custodiainstance.py
index 46998164ad..25f122bbd7 100644
--- a/ipaserver/install/custodiainstance.py
+++ b/ipaserver/install/custodiainstance.py
@@ -16,6 +16,7 @@
 from ipaserver.install import sysupgrade
 from base64 import b64decode
 from jwcrypto.common import json_decode
+import ldap
 import shutil
 import os
 import stat
@@ -70,7 +71,14 @@ def uninstall(self):
             'server_keys': self.server_keys,
             'ldap_uri': self.ldap_uri
         })
-        keystore.remove_server_keys()
+        keystore.remove_server_keys_file()
+        try:
+            keystore.remove_server_keys()
+        except ldap.CONNECT_ERROR:
+            logger.debug(
+                "Cannot remove custodia keys now, server_del takes care of "
+                "them later."
+            )
         installutils.remove_file(self.config_file)
         sysupgrade.set_upgrade_state('custodia', 'installed', False)
 
diff --git a/ipaserver/secrets/kem.py b/ipaserver/secrets/kem.py
index 266d975d54..22d6afcef3 100644
--- a/ipaserver/secrets/kem.py
+++ b/ipaserver/secrets/kem.py
@@ -235,6 +235,15 @@ def generate_keys(self, servicename):
         ldapconn.set_key(KEY_USAGE_SIG, principal, pubkeys[0])
         ldapconn.set_key(KEY_USAGE_ENC, principal, pubkeys[1])
 
+    def remove_server_keys_file(self):
+        """Remove keys from disk
+        """
+        try:
+            os.unlink(self.config['server_keys'])
+        except OSError as e:
+            if e.errno != errno.ENOENT:
+                raise
+
     def remove_server_keys(self):
         """Remove keys from LDAP and disk
         """
@@ -243,15 +252,11 @@ def remove_server_keys(self):
     def remove_keys(self, servicename):
         """Remove keys from LDAP and disk
         """
+        self.remove_server_keys_file()
         principal = '%s/%s@%s' % (servicename, self.host, self.realm)
         ldapconn = KEMLdap(self.ldap_uri)
         ldapconn.del_key(KEY_USAGE_SIG, principal)
         ldapconn.del_key(KEY_USAGE_ENC, principal)
-        try:
-            os.unlink(self.config['server_keys'])
-        except OSError as e:
-            if e.errno != errno.ENOENT:
-                raise
 
     @property
     def server_keys(self):
_______________________________________________
FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org
To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org

Reply via email to