Display serial number as HEX (DECIMAL) when showing certificates.

https://fedorahosted.org/freeipa/ticket/1991
This commit is contained in:
Rob Crittenden
2012-03-06 15:53:07 -05:00
parent e9d68a7b00
commit d4a80dbe52
10 changed files with 50 additions and 19 deletions

View File

@@ -319,6 +319,7 @@ IPA.cert.view_dialog = function(spec) {
that.subject = IPA.cert.parse_dn(spec.subject); that.subject = IPA.cert.parse_dn(spec.subject);
that.serial_number = spec.serial_number || ''; that.serial_number = spec.serial_number || '';
that.serial_number_hex = spec.serial_number_hex || '';
that.issuer = IPA.cert.parse_dn(spec.issuer); that.issuer = IPA.cert.parse_dn(spec.issuer);
that.issued_on = spec.issued_on || ''; that.issued_on = spec.issued_on || '';
that.expires_on = spec.expires_on || ''; that.expires_on = spec.expires_on || '';
@@ -367,6 +368,12 @@ IPA.cert.view_dialog = function(spec) {
text: that.serial_number text: that.serial_number
}).appendTo(tr); }).appendTo(tr);
tr = $('<tr/>').appendTo(table);
$('<td>'+IPA.messages.objects.cert.serial_number_hex+':</td>').appendTo(tr);
$('<td/>', {
text: that.serial_number_hex
}).appendTo(tr);
tr = $('<tr/>').appendTo(table); tr = $('<tr/>').appendTo(table);
$('<td/>', { $('<td/>', {
'colspan': 2, 'colspan': 2,
@@ -785,6 +792,7 @@ IPA.cert.status_widget = function(spec) {
'title': title, 'title': title,
'subject': result['subject'], 'subject': result['subject'],
'serial_number': result['serial_number'], 'serial_number': result['serial_number'],
'serial_number_hex': result['serial_number_hex'],
'issuer': result['issuer'], 'issuer': result['issuer'],
'issued_on': result['valid_not_before'], 'issued_on': result['valid_not_before'],
'expires_on': result['valid_not_after'], 'expires_on': result['valid_not_after'],

View File

@@ -232,37 +232,32 @@ class cert_request(VirtualCommand):
) )
has_output_params = ( has_output_params = (
Str('certificate?', Str('certificate',
label=_('Certificate'), label=_('Certificate'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('subject?', Str('subject',
label=_('Subject'), label=_('Subject'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('issuer?', Str('issuer',
label=_('Issuer'), label=_('Issuer'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('valid_not_before?', Str('valid_not_before',
label=_('Not Before'), label=_('Not Before'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('valid_not_after?', Str('valid_not_after',
label=_('Not After'), label=_('Not After'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('md5_fingerprint?', Str('md5_fingerprint',
label=_('Fingerprint (MD5)'), label=_('Fingerprint (MD5)'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('sha1_fingerprint?', Str('sha1_fingerprint',
label=_('Fingerprint (SHA1)'), label=_('Fingerprint (SHA1)'),
flags=['no_create', 'no_update', 'no_search'],
), ),
Str('serial_number?', Str('serial_number',
label=_('Serial number'), label=_('Serial number'),
flags=['no_create', 'no_update', 'no_search'], ),
Str('serial_number_hex',
label=_('Serial number (hex)'),
), ),
) )
@@ -456,9 +451,12 @@ class cert_show(VirtualCommand):
Str('sha1_fingerprint', Str('sha1_fingerprint',
label=_('Fingerprint (SHA1)'), label=_('Fingerprint (SHA1)'),
), ),
Str('revocation_reason?', Str('revocation_reason',
label=_('Revocation reason'), label=_('Revocation reason'),
), ),
Str('serial_number_hex',
label=_('Serial number (hex)'),
),
) )
takes_options = ( takes_options = (
@@ -565,10 +563,10 @@ class cert_remove_hold(VirtualCommand):
takes_args = _serial_number takes_args = _serial_number
has_output_params = ( has_output_params = (
Flag('unrevoked?', Flag('unrevoked',
label=_('Unrevoked'), label=_('Unrevoked'),
), ),
Str('error_string?', Str('error_string',
label=_('Error'), label=_('Error'),
), ),
) )

View File

@@ -146,6 +146,9 @@ host_output_params = (
Str('serial_number', Str('serial_number',
label=_('Serial Number'), label=_('Serial Number'),
), ),
Str('serial_number_hex',
label=_('Serial Number (hex)'),
),
Str('issuer', Str('issuer',
label=_('Issuer'), label=_('Issuer'),
), ),

View File

@@ -313,6 +313,7 @@ class i18n_messages(Command):
"revoke_confirmation": _("To confirm your intention to revoke this certificate, select a reason from the pull-down list, and click the \"Revoke\" button."), "revoke_confirmation": _("To confirm your intention to revoke this certificate, select a reason from the pull-down list, and click the \"Revoke\" button."),
"revoked": _("Certificate Revoked"), "revoked": _("Certificate Revoked"),
"serial_number": _("Serial Number"), "serial_number": _("Serial Number"),
"serial_number_hex": _("Serial Number (hex)"),
"sha1_fingerprint": _("SHA1 Fingerprint"), "sha1_fingerprint": _("SHA1 Fingerprint"),
"superseded": _("Superseded"), "superseded": _("Superseded"),
"unspecified": _("Unspecified"), "unspecified": _("Unspecified"),

View File

@@ -96,6 +96,9 @@ output_params = (
Str('serial_number', Str('serial_number',
label=_('Serial Number'), label=_('Serial Number'),
), ),
Str('serial_number_hex',
label=_('Serial Number (hex)'),
),
Str('issuer', Str('issuer',
label=_('Issuer'), label=_('Issuer'),
), ),
@@ -190,6 +193,7 @@ def set_certificate_attrs(entry_attrs):
cert = x509.load_certificate(cert, datatype=x509.DER) cert = x509.load_certificate(cert, datatype=x509.DER)
entry_attrs['subject'] = unicode(cert.subject) entry_attrs['subject'] = unicode(cert.subject)
entry_attrs['serial_number'] = unicode(cert.serial_number) entry_attrs['serial_number'] = unicode(cert.serial_number)
entry_attrs['serial_number_hex'] = u'0x%X' % cert.serial_number
entry_attrs['issuer'] = unicode(cert.issuer) entry_attrs['issuer'] = unicode(cert.issuer)
entry_attrs['valid_not_before'] = unicode(cert.valid_not_before_str) entry_attrs['valid_not_before'] = unicode(cert.valid_not_before_str)
entry_attrs['valid_not_after'] = unicode(cert.valid_not_after_str) entry_attrs['valid_not_after'] = unicode(cert.valid_not_after_str)

View File

@@ -609,6 +609,7 @@ def parse_profile_submit_result_xml(doc):
if len(serial_number) == 1: if len(serial_number) == 1:
serial_number = int(serial_number[0].text, 16) # parse as hex serial_number = int(serial_number[0].text, 16) # parse as hex
response_request['serial_number'] = serial_number response_request['serial_number'] = serial_number
response['serial_number_hex'] = u'0x%X' % serial_number
certificate = request.xpath('b64[1]') certificate = request.xpath('b64[1]')
if len(certificate) == 1: if len(certificate) == 1:
@@ -834,6 +835,7 @@ def parse_display_cert_xml(doc):
if len(serial_number) == 1: if len(serial_number) == 1:
serial_number = int(serial_number[0].text, 16) # parse as hex serial_number = int(serial_number[0].text, 16) # parse as hex
response['serial_number'] = serial_number response['serial_number'] = serial_number
response['serial_number_hex'] = u'0x%X' % serial_number
pkcs7_chain = doc.xpath('//xml/header/pkcs7ChainBase64[1]') pkcs7_chain = doc.xpath('//xml/header/pkcs7ChainBase64[1]')
if len(pkcs7_chain) == 1: if len(pkcs7_chain) == 1:
@@ -1026,6 +1028,7 @@ def parse_revoke_cert_xml(doc):
if len(serial_number) == 1: if len(serial_number) == 1:
serial_number = int(serial_number[0].text, 16) # parse as hex serial_number = int(serial_number[0].text, 16) # parse as hex
response_record['serial_number'] = serial_number response_record['serial_number'] = serial_number
response['serial_number_hex'] = u'0x%X' % serial_number
error_string = record.xpath('error[1]') error_string = record.xpath('error[1]')
if len(error_string) == 1: if len(error_string) == 1:
@@ -1187,6 +1190,7 @@ def parse_unrevoke_cert_xml(doc):
if len(serial_number) == 1: if len(serial_number) == 1:
serial_number = int(serial_number[0].text, 16) # parse as hex serial_number = int(serial_number[0].text, 16) # parse as hex
response['serial_number'] = serial_number response['serial_number'] = serial_number
response['serial_number_hex'] = u'0x%X' % serial_number
return response return response
@@ -1471,6 +1475,7 @@ class ra(rabase.rabase):
if parse_result.has_key('serial_number'): if parse_result.has_key('serial_number'):
# see module documentation concerning serial numbers and XMLRPC # see module documentation concerning serial numbers and XMLRPC
cmd_result['serial_number'] = unicode(parse_result['serial_number']) cmd_result['serial_number'] = unicode(parse_result['serial_number'])
cmd_result['serial_number_hex'] = u'0x%X' % int(cmd_result['serial_number'])
if parse_result.has_key('revocation_reason'): if parse_result.has_key('revocation_reason'):
cmd_result['revocation_reason'] = parse_result['revocation_reason'] cmd_result['revocation_reason'] = parse_result['revocation_reason']
@@ -1539,6 +1544,7 @@ class ra(rabase.rabase):
if request.has_key('serial_number'): if request.has_key('serial_number'):
# see module documentation concerning serial numbers and XMLRPC # see module documentation concerning serial numbers and XMLRPC
cmd_result['serial_number'] = unicode(request['serial_number']) cmd_result['serial_number'] = unicode(request['serial_number'])
cmd_result['serial_number_hex'] = u'0x%X' % request['serial_number']
if request.has_key('certificate'): if request.has_key('certificate'):
cmd_result['certificate'] = request['certificate'] cmd_result['certificate'] = request['certificate']

View File

@@ -221,6 +221,7 @@ class ra(rabase.rabase):
cmd_result = {} cmd_result = {}
cmd_result['serial_number'] = unicode(serial) # convert long to decimal unicode string cmd_result['serial_number'] = unicode(serial) # convert long to decimal unicode string
cmd_result['serial_number_hex'] = u'0x%X' % serial
cmd_result['certificate'] = unicode(cert) cmd_result['certificate'] = unicode(cert)
cmd_result['subject'] = unicode(subject) cmd_result['subject'] = unicode(subject)

View File

@@ -26,6 +26,7 @@ from ipalib import api, errors, x509
from ipalib.dn import * from ipalib.dn import *
from tests.test_xmlrpc.xmlrpc_test import Declarative, fuzzy_uuid, fuzzy_digits from tests.test_xmlrpc.xmlrpc_test import Declarative, fuzzy_uuid, fuzzy_digits
from tests.test_xmlrpc.xmlrpc_test import fuzzy_hash, fuzzy_date, fuzzy_issuer from tests.test_xmlrpc.xmlrpc_test import fuzzy_hash, fuzzy_date, fuzzy_issuer
from tests.test_xmlrpc.xmlrpc_test import fuzzy_hex
from tests.test_xmlrpc import objectclasses from tests.test_xmlrpc import objectclasses
import base64 import base64
@@ -253,6 +254,7 @@ class test_host(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
issuer=fuzzy_issuer, issuer=fuzzy_issuer,
@@ -284,6 +286,7 @@ class test_host(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
issuer=fuzzy_issuer, issuer=fuzzy_issuer,
@@ -482,6 +485,7 @@ class test_host(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
macaddress=[u'00:50:56:30:F6:5F'], macaddress=[u'00:50:56:30:F6:5F'],
@@ -511,6 +515,7 @@ class test_host(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
macaddress=[u'00:50:56:30:F6:5F', u'00:50:56:2C:8D:82'], macaddress=[u'00:50:56:30:F6:5F', u'00:50:56:2C:8D:82'],

View File

@@ -24,6 +24,7 @@ Test the `ipalib/plugins/service.py` module.
from ipalib import api, errors, x509 from ipalib import api, errors, x509
from tests.test_xmlrpc.xmlrpc_test import Declarative, fuzzy_uuid, fuzzy_hash from tests.test_xmlrpc.xmlrpc_test import Declarative, fuzzy_uuid, fuzzy_hash
from tests.test_xmlrpc.xmlrpc_test import fuzzy_digits, fuzzy_date, fuzzy_issuer from tests.test_xmlrpc.xmlrpc_test import fuzzy_digits, fuzzy_date, fuzzy_issuer
from tests.test_xmlrpc.xmlrpc_test import fuzzy_hex
from tests.test_xmlrpc import objectclasses from tests.test_xmlrpc import objectclasses
import base64 import base64
from ipalib.dn import * from ipalib.dn import *
@@ -380,6 +381,7 @@ class test_service(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
issuer=fuzzy_issuer, issuer=fuzzy_issuer,
@@ -407,6 +409,7 @@ class test_service(Declarative):
subject=lambda x: DN(x) == \ subject=lambda x: DN(x) == \
DN(('CN',api.env.host),('O',api.env.realm)), DN(('CN',api.env.host),('O',api.env.realm)),
serial_number=fuzzy_digits, serial_number=fuzzy_digits,
serial_number_hex=fuzzy_hex,
md5_fingerprint=fuzzy_hash, md5_fingerprint=fuzzy_hash,
sha1_fingerprint=fuzzy_hash, sha1_fingerprint=fuzzy_hash,
issuer=fuzzy_issuer, issuer=fuzzy_issuer,

View File

@@ -53,6 +53,8 @@ fuzzy_date = Fuzzy('^[a-zA-Z]{3} [a-zA-Z]{3} \d{2} \d{2}:\d{2}:\d{2} \d{4} UTC$'
fuzzy_issuer = Fuzzy(type=basestring, test=lambda issuer: valid_issuer(issuer, api.env.realm)) fuzzy_issuer = Fuzzy(type=basestring, test=lambda issuer: valid_issuer(issuer, api.env.realm))
fuzzy_hex = Fuzzy('^0x[0-9a-fA-F]+$', type=basestring)
# Matches password - password consists of all printable characters without whitespaces # Matches password - password consists of all printable characters without whitespaces
# The only exception is space, but space cannot be at the beggingin or end of the pwd # The only exception is space, but space cannot be at the beggingin or end of the pwd
fuzzy_password = Fuzzy('^\S([\S ]*\S)*$') fuzzy_password = Fuzzy('^\S([\S ]*\S)*$')