Remove ipa-ca.crt from systemwide CA store on client uninstall and cert update

The file was used by previous versions of IPA to provide the IPA CA certificate
to p11-kit and has since been obsoleted by ipa.p11-kit, a file which contains
all the CA certificates and associated trust policy from the LDAP certificate
store.

Since p11-kit is hooked into /etc/httpd/alias, ipa-ca.crt must be removed to
prevent certificate import failures in installer code.

Also add ipa.p11-kit to the files owned by the freeipa-python package.

https://fedorahosted.org/freeipa/ticket/3259

Reviewed-By: Rob Crittenden <rcritten@redhat.com>
This commit is contained in:
Jan Cholasta 2014-09-17 15:04:11 +02:00 committed by Martin Kosek
parent 4e68046751
commit 734afdf936
3 changed files with 30 additions and 10 deletions

View File

@ -815,6 +815,7 @@ fi
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/key3.db %ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/key3.db
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/secmod.db %ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/secmod.db
%ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/pwdfile.txt %ghost %config(noreplace) %{_sysconfdir}/ipa/nssdb/pwdfile.txt
%ghost %config(noreplace) %{_sysconfdir}/pki/ca-trust/source/ipa.p11-kit
%if ! %{ONLY_CLIENT} %if ! %{ONLY_CLIENT}
%files tests -f tests-python.list %files tests -f tests-python.list

View File

@ -80,6 +80,7 @@ class BasePathNamespace(object):
PAM_LDAP_CONF = "/etc/pam_ldap.conf" PAM_LDAP_CONF = "/etc/pam_ldap.conf"
PASSWD = "/etc/passwd" PASSWD = "/etc/passwd"
ETC_PKI_CA_DIR = "/etc/pki-ca" ETC_PKI_CA_DIR = "/etc/pki-ca"
SYSTEMWIDE_CA_STORE = "/etc/pki/ca-trust/source/anchors/"
IPA_P11_KIT = "/etc/pki/ca-trust/source/ipa.p11-kit" IPA_P11_KIT = "/etc/pki/ca-trust/source/ipa.p11-kit"
NSS_DB_DIR = "/etc/pki/nssdb" NSS_DB_DIR = "/etc/pki/nssdb"
NSSDB_CERT8_DB = "/etc/pki/nssdb/cert8.db" NSSDB_CERT8_DB = "/etc/pki/nssdb/cert8.db"

View File

@ -158,6 +158,16 @@ class FedoraTaskNamespace(BaseTaskNamespace):
auth_config.execute() auth_config.execute()
def insert_ca_certs_into_systemwide_ca_store(self, ca_certs): def insert_ca_certs_into_systemwide_ca_store(self, ca_certs):
new_cacert_path = os.path.join(paths.SYSTEMWIDE_CA_STORE, 'ipa-ca.crt')
if os.path.exists(new_cacert_path):
try:
os.remove(new_cacert_path)
except OSError, e:
root_logger.error(
"Could not remove %s: %s", new_cacert_path, e)
return False
new_cacert_path = paths.IPA_P11_KIT new_cacert_path = paths.IPA_P11_KIT
try: try:
@ -250,25 +260,33 @@ class FedoraTaskNamespace(BaseTaskNamespace):
return False return False
def remove_ca_certs_from_systemwide_ca_store(self): def remove_ca_certs_from_systemwide_ca_store(self):
new_cacert_path = paths.IPA_P11_KIT ipa_ca_crt = os.path.join(paths.SYSTEMWIDE_CA_STORE, 'ipa-ca.crt')
update = False
# Remove CA cert from systemwide store # Remove CA cert from systemwide store
if os.path.exists(new_cacert_path): for new_cacert_path in (paths.IPA_P11_KIT, ipa_ca_crt):
if not os.path.exists(new_cacert_path):
continue
try: try:
os.remove(new_cacert_path) os.remove(new_cacert_path)
ipautil.run([paths.UPDATE_CA_TRUST])
except OSError, e: except OSError, e:
root_logger.error('Could not remove: %s, %s' root_logger.error(
% (new_cacert_path, str(e))) "Could not remove %s: %s", new_cacert_path, e)
return False else:
update = True
if update:
try:
ipautil.run([paths.UPDATE_CA_TRUST])
except CalledProcessError, e: except CalledProcessError, e:
root_logger.error('Could not update systemwide CA trust ' root_logger.error(
'database: %s' % str(e)) "Could not update systemwide CA trust database: %s", e)
return False return False
else: else:
root_logger.info('Systemwide CA database updated.') root_logger.info("Systemwide CA database updated.")
return True
return True return False
def backup_and_replace_hostname(self, fstore, statestore, hostname): def backup_and_replace_hostname(self, fstore, statestore, hostname):
old_hostname = socket.gethostname() old_hostname = socket.gethostname()