diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2002-06-25 14:36:08 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2002-06-25 14:36:08 +0000 |
commit | 3d93c7c03187141f5960dab6a0c8d8c2dec634b1 (patch) | |
tree | d8a2e51acdf41a4b4a6efcf4e16ebd3b8ad99909 | |
parent | cba1d57cb535b5479f0b52ccd9b1d8b993de300a (diff) | |
download | gnutls-3d93c7c03187141f5960dab6a0c8d8c2dec634b1.tar.gz |
Improved XML output.
-rw-r--r-- | lib/x509_xml.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/x509_xml.c b/lib/x509_xml.c index 83af80d863..0c713e0d4b 100644 --- a/lib/x509_xml.c +++ b/lib/x509_xml.c @@ -35,6 +35,8 @@ #include <gnutls_str.h> #include <gnutls_x509.h> +static int _gnutls_x509_expand_extensions(ASN1_TYPE* rasn, const char *root); + static void *find_default_value(ASN1_TYPE x) { ASN1_TYPE p = x; @@ -198,6 +200,7 @@ _gnutls_asn1_get_structure_xml(ASN1_TYPE structure, char *name, ret = asn1_expand_any_defined_by( _gnutls_get_pkix(), &structure); + ret = _gnutls_x509_expand_extensions( &structure, name); //asn1_print_structure( stdout, structure, name, ASN1_PRINT_ALL); //return 0; @@ -605,3 +608,51 @@ int gnutls_x509_get_certificate_xml(const gnutls_datum * cert, int detail, gnutl return 0; } + +/* This function will attempt to parse Extensions in + * an X509v3 certificate + * + * If no_critical_ext is non zero, then unsupported critical extensions + * do not lead into a fatal error. + */ +static int _gnutls_x509_expand_extensions(ASN1_TYPE* rasn, const char *root) +{ + int k, result, len; + char name[128], name2[128], counter[MAX_INT_DIGITS]; + char name1[128]; + char extnID[128]; + + k = 0; + do { + k++; + + _gnutls_str_cpy(name, sizeof(name), root); + _gnutls_str_cat(name, sizeof(name), ".tbsCertificate.extensions.?"); + _gnutls_int2str(k, counter); + _gnutls_str_cat(name, sizeof(name), counter); + + _gnutls_str_cpy(name2, sizeof(name2), name); + _gnutls_str_cat(name2, sizeof(name2), ".extnID"); + + _gnutls_str_cpy(name1, sizeof(name1), name); + _gnutls_str_cat(name1, sizeof(name1), ".extnValue"); + + len = sizeof(extnID) - 1; + + result = asn1_expand_octet_string( _gnutls_get_pkix(), + rasn, name1, name2); + + if (result == ASN1_ELEMENT_NOT_FOUND) + break; + else if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + } while (1); + + if (result == ASN1_ELEMENT_NOT_FOUND) + return 0; + else + return _gnutls_asn2err(result); +} |