diff options
-rw-r--r-- | rpkid/rpki/oids.py | 30 | ||||
-rw-r--r-- | rpkid/rpki/x509.py | 2 |
2 files changed, 31 insertions, 1 deletions
diff --git a/rpkid/rpki/oids.py b/rpkid/rpki/oids.py index 1e67dff9..2b8302aa 100644 --- a/rpkid/rpki/oids.py +++ b/rpkid/rpki/oids.py @@ -69,9 +69,39 @@ oid2name = { (2, 5, 4, 3) : "commonName", (2, 5, 4, 5) : "serialNumber", (2, 5, 4, 6) : "countryName", + (2, 5, 4, 7) : "localityName", + (2, 5, 4, 8) : "stateOrProvinceName", + (2, 5, 4, 9) : "streetAddress", + (2, 5, 4, 10) : "organizationName", + (2, 5, 4, 11) : "organizationalUnitName", } ## @var name2oid # Mapping table of string names to OIDs name2oid = dict((v, k) for k, v in oid2name.items()) + +def safe_name2oid(name): + """ + Map name to OID, also parsing numeric (dotted decimal) format. + """ + + try: + return name2oid[name] + except KeyError: + fields = name.split(".") + if all(field.isdigit() for field in fields): + return tuple(int(field) for field in fields) + else: + raise + +def safe_oid2name(oid): + """ + Map OID to name. If we have no mapping, generate numeric (dotted + decimal) format. + """ + + try: + return oid2name[oid] + except KeyError: + return ".".join(str(field) for field in oid) diff --git a/rpkid/rpki/x509.py b/rpkid/rpki/x509.py index 42b52f1d..92194a96 100644 --- a/rpkid/rpki/x509.py +++ b/rpkid/rpki/x509.py @@ -176,7 +176,7 @@ class X501DN(object): raise TypeError("Don't know how to interpret %r as an X.501 DN" % (ini,), ini) def __str__(self): - return "".join("/" + "+".join("%s=%s" % (rpki.oids.oid2name[a[0]], a[1][1]) + return "".join("/" + "+".join("%s=%s" % (rpki.oids.safe_oid2name(a[0]), a[1][1]) for a in rdn) for rdn in self.dn) |