pgreco / rpms / ipa

Forked from forks/areguera/rpms/ipa 4 years ago
Clone

Blame SOURCES/0009-httpinstance-clean-up-etc-httpd-alias-on-uninstall.patch

483b06
From 10e74165a827377ed3318d4d2b974fdbf0fab9db Mon Sep 17 00:00:00 2001
483b06
From: Jan Cholasta <jcholast@redhat.com>
483b06
Date: Wed, 8 Mar 2017 14:24:15 +0000
483b06
Subject: [PATCH] httpinstance: clean up /etc/httpd/alias on uninstall
483b06
483b06
Restore cert8.db, key3.db, pwdfile.txt and secmod.db in /etc/httpd/alias
483b06
from backup on uninstall.
483b06
483b06
Files modified by IPA are kept with .ipasave suffix.
483b06
483b06
https://pagure.io/freeipa/issue/4639
483b06
483b06
Reviewed-By: Martin Babinsky <mbabinsk@redhat.com>
483b06
---
483b06
 ipapython/certdb.py               | 13 +++++++++++++
483b06
 ipaserver/install/certs.py        |  3 +++
483b06
 ipaserver/install/httpinstance.py |  3 +++
483b06
 3 files changed, 19 insertions(+)
483b06
483b06
diff --git a/ipapython/certdb.py b/ipapython/certdb.py
483b06
index 6c89e778068d9ed1e9939077f7114463776e3516..f1410e5ae4290263573e9554ab4e66873d4344a1 100644
483b06
--- a/ipapython/certdb.py
483b06
+++ b/ipapython/certdb.py
483b06
@@ -169,6 +169,19 @@ class NSSDatabase(object):
483b06
                     new_mode = filemode
483b06
                 os.chmod(path, new_mode)
483b06
 
483b06
+    def restore(self):
483b06
+        for filename in NSS_FILES:
483b06
+            path = os.path.join(self.secdir, filename)
483b06
+            backup_path = path + '.orig'
483b06
+            save_path = path + '.ipasave'
483b06
+            try:
483b06
+                if os.path.exists(path):
483b06
+                    os.rename(path, save_path)
483b06
+                if os.path.exists(backup_path):
483b06
+                    os.rename(backup_path, path)
483b06
+            except OSError as e:
483b06
+                root_logger.debug(e)
483b06
+
483b06
     def list_certs(self):
483b06
         """Return nicknames and cert flags for all certs in the database
483b06
 
483b06
diff --git a/ipaserver/install/certs.py b/ipaserver/install/certs.py
483b06
index 9f340b8678c55cffe2872df97c643c34857cfaa9..0ca971358030db6a6e7e410e58a984675bcf53ac 100644
483b06
--- a/ipaserver/install/certs.py
483b06
+++ b/ipaserver/install/certs.py
483b06
@@ -234,6 +234,9 @@ class CertDB(object):
483b06
                              backup=True)
483b06
         self.set_perms(self.passwd_fname, write=True)
483b06
 
483b06
+    def restore(self):
483b06
+        self.nssdb.restore()
483b06
+
483b06
     def list_certs(self):
483b06
         """
483b06
         Return a tuple of tuples containing (nickname, trust)
483b06
diff --git a/ipaserver/install/httpinstance.py b/ipaserver/install/httpinstance.py
483b06
index ca3bcc87eec2c93a664db517df3eddecaaf565c2..f6f0b0c4f6acd648aa9f6f5d7400617613245473 100644
483b06
--- a/ipaserver/install/httpinstance.py
483b06
+++ b/ipaserver/install/httpinstance.py
483b06
@@ -555,6 +555,9 @@ class HTTPInstance(service.Service):
483b06
                 ca_iface.Set('org.fedorahosted.certmonger.ca',
483b06
                              'external-helper', helper)
483b06
 
483b06
+        db = certs.CertDB(self.realm, paths.HTTPD_ALIAS_DIR)
483b06
+        db.restore()
483b06
+
483b06
         for f in [paths.HTTPD_IPA_CONF, paths.HTTPD_SSL_CONF, paths.HTTPD_NSS_CONF]:
483b06
             try:
483b06
                 self.fstore.restore_file(f)
483b06
-- 
483b06
2.12.1
483b06