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