summaryrefslogtreecommitdiffstats
path: root/ipaserver/plugins
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2016-08-23 13:59:33 +0200
committerMartin Basti <mbasti@redhat.com>2016-08-30 12:42:12 +0200
commit117274ff047eb4148fd2624ae800f45e50a7e2cd (patch)
tree424de2635bb8314e360d40479b61ec2f27e45813 /ipaserver/plugins
parent22d5f579bbd8bb452cf1bf620294ab6ade6e7c47 (diff)
downloadfreeipa-117274ff047eb4148fd2624ae800f45e50a7e2cd.tar.gz
freeipa-117274ff047eb4148fd2624ae800f45e50a7e2cd.tar.xz
freeipa-117274ff047eb4148fd2624ae800f45e50a7e2cd.zip
cert: include CA name in cert command output
Include name of the CA that issued a certificate in cert-request, cert-show and cert-find. This allows the caller to call further commands on the cert without having to call ca-find to find the name of the CA. https://fedorahosted.org/freeipa/ticket/6151 Reviewed-By: Martin Basti <mbasti@redhat.com>
Diffstat (limited to 'ipaserver/plugins')
-rw-r--r--ipaserver/plugins/cert.py33
1 files changed, 24 insertions, 9 deletions
diff --git a/ipaserver/plugins/cert.py b/ipaserver/plugins/cert.py
index 5267e3863..2e8aa9417 100644
--- a/ipaserver/plugins/cert.py
+++ b/ipaserver/plugins/cert.py
@@ -263,6 +263,15 @@ def bind_principal_can_manage_cert(cert):
class BaseCertObject(Object):
takes_params = (
+ Str(
+ 'cacn?',
+ cli_name='ca',
+ default=IPA_CA_CN,
+ autofill=True,
+ label=_('Issuing CA'),
+ doc=_('Name of issuing CA'),
+ flags={'no_create', 'no_update', 'no_search'},
+ ),
Bytes(
'certificate', validate_certificate,
label=_("Certificate"),
@@ -459,14 +468,7 @@ class BaseCertObject(Object):
class BaseCertMethod(Method):
def get_options(self):
- yield Str('cacn?',
- cli_name='ca',
- default=IPA_CA_CN,
- autofill=True,
- query=True,
- label=_('Issuing CA'),
- doc=_('Name of issuing CA'),
- )
+ yield self.obj.params['cacn'].clone(query=True)
for option in super(BaseCertMethod, self).get_options():
yield option
@@ -555,7 +557,8 @@ class cert_request(Create, BaseCertMethod, VirtualCommand):
# referencing nonexistant CA) and look up authority ID.
#
ca = kw['cacn']
- ca_id = api.Command.ca_show(ca)['result']['ipacaid'][0]
+ ca_obj = api.Command.ca_show(ca)['result']
+ ca_id = ca_obj['ipacaid'][0]
"""
Access control is partially handled by the ACI titled
@@ -747,6 +750,7 @@ class cert_request(Create, BaseCertMethod, VirtualCommand):
if not raw:
self.obj._parse(result, all)
result['request_id'] = int(result['request_id'])
+ result['cacn'] = ca_obj['cn'][0]
# Success? Then add it to the principal's entry
# (unless the profile tells us not to)
@@ -926,6 +930,7 @@ class cert_show(Retrieve, CertMethod, VirtualCommand):
self.obj._parse(result, all)
result['revoked'] = ('revocation_reason' in result)
self.obj._fill_owners(result)
+ result['cacn'] = ca_obj['cn'][0]
return dict(result=result, value=pkey_to_value(serial_number, options))
@@ -1196,11 +1201,19 @@ class cert_find(Search, CertMethod):
raise
return result, False, complete
+ ca_objs = self.api.Command.ca_find()['result']
+ ca_objs = {DN(ca['ipacasubjectdn'][0]): ca for ca in ca_objs}
+
ra = self.api.Backend.ra
for ra_obj in ra.find(ra_options):
issuer = DN(ra_obj['issuer'])
serial_number = ra_obj['serial_number']
+ try:
+ ca_obj = ca_objs[issuer]
+ except KeyError:
+ continue
+
if pkey_only:
obj = {'serial_number': serial_number}
else:
@@ -1217,6 +1230,8 @@ class cert_find(Search, CertMethod):
ra_obj['certificate'].replace('\r\n', ''))
self.obj._parse(obj)
+ obj['cacn'] = ca_obj['cn'][0]
+
result[issuer, serial_number] = obj
return result, False, complete