summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmando Neto <abiagion@redhat.com>2018-09-03 18:52:57 -0300
committerChristian Heimes <cheimes@redhat.com>2018-09-06 14:36:15 +0200
commitc7064494e5801d5fd4670e6aab1e07c65d7a0731 (patch)
treed581e72c64fe090def7dbde0541546994aeb093b
parentc29581c9a0e3d3c38344b8b3f4765b971ea7713d (diff)
downloadfreeipa-c7064494e5801d5fd4670e6aab1e07c65d7a0731.tar.gz
freeipa-c7064494e5801d5fd4670e6aab1e07c65d7a0731.tar.xz
freeipa-c7064494e5801d5fd4670e6aab1e07c65d7a0731.zip
Fix certificate type error when exporting to file
Commands `ipa ca-show` and `ipa cert-show` share the same code, this commit updates the former, closing the gap between them. Reflecting the changes done in 5a44ca638310913ab6b0c239374f4b0ddeeedeb3. https://pagure.io/freeipa/issue/7628 Signed-off-by: Armando Neto <abiagion@redhat.com> Reviewed-By: Christian Heimes <cheimes@redhat.com>
-rw-r--r--ipaclient/plugins/ca.py11
-rw-r--r--ipatests/test_xmlrpc/test_ca_plugin.py7
-rw-r--r--ipatests/test_xmlrpc/tracker/ca_plugin.py5
3 files changed, 15 insertions, 8 deletions
diff --git a/ipaclient/plugins/ca.py b/ipaclient/plugins/ca.py
index c48f76ea7..e799bccc8 100644
--- a/ipaclient/plugins/ca.py
+++ b/ipaclient/plugins/ca.py
@@ -1,6 +1,7 @@
#
# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
#
+import base64
from ipaclient.frontend import MethodOverride
from ipalib import errors, util, x509, Str
@@ -34,13 +35,11 @@ class WithCertOutArgs(MethodOverride):
result = super(WithCertOutArgs, self).forward(*keys, **options)
if filename:
if options.get('chain', False):
- certs = (x509.load_der_x509_certificate(c)
- for c in result['result']['certificate_chain'])
+ certs = result['result']['certificate_chain']
else:
- certs = [
- x509.load_der_x509_certificate(
- result['result']['certificate'])
- ]
+ certs = [result['result']['certificate']]
+ certs = (x509.load_der_x509_certificate(base64.b64decode(cert))
+ for cert in certs)
x509.write_certificate_list(certs, filename)
return result
diff --git a/ipatests/test_xmlrpc/test_ca_plugin.py b/ipatests/test_xmlrpc/test_ca_plugin.py
index 28cd94aad..b48b58e40 100644
--- a/ipatests/test_xmlrpc/test_ca_plugin.py
+++ b/ipatests/test_xmlrpc/test_ca_plugin.py
@@ -97,6 +97,13 @@ class TestCAbasicCRUD(XMLRPC_test):
def test_retrieve_all(self, crud_subca):
crud_subca.retrieve(all=True)
+ def test_export_ca(self, tmpdir, crud_subca):
+ exported_ca = tmpdir.join('exported_ca')
+ command = crud_subca.make_retrieve_command(
+ certificate_out=u'%s' % exported_ca,
+ )
+ command()
+
def test_delete(self, crud_subca):
crud_subca.delete()
diff --git a/ipatests/test_xmlrpc/tracker/ca_plugin.py b/ipatests/test_xmlrpc/tracker/ca_plugin.py
index e18b1c178..310a0f173 100644
--- a/ipatests/test_xmlrpc/tracker/ca_plugin.py
+++ b/ipatests/test_xmlrpc/tracker/ca_plugin.py
@@ -91,9 +91,10 @@ class CATracker(Tracker):
result=dict(failed=[])
), result)
- def make_retrieve_command(self, all=False, raw=False):
+ def make_retrieve_command(self, all=False, raw=False, **options):
"""Make function that retrieves the entry using ${CMD}_show"""
- return self.make_command('ca_show', self.name, all=all, raw=raw)
+ return self.make_command('ca_show', self.name, all=all, raw=raw,
+ **options)
def check_retrieve(self, result, all=False, raw=False):
"""Check the plugin's `show` command result"""