From: Dr. Stephen Henson Date: Sat, 3 Sep 2005 00:40:40 +0000 (+0000) Subject: Update to ASN1 printing code. X-Git-Tag: OpenSSL_0_9_8k^2~1824 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c11c64fbe0c0d3d8eb3bdbda368805dc58d55b90;p=oweals%2Fopenssl.git Update to ASN1 printing code. --- diff --git a/apps/pkcs7.c b/apps/pkcs7.c index aa1852a9fa..86d31b99a7 100644 --- a/apps/pkcs7.c +++ b/apps/pkcs7.c @@ -241,7 +241,7 @@ bad: } if (p7_print) - PKCS7_print(out, p7, 0, NULL); + PKCS7_print_ctx(out, p7, 0, NULL); if (print_certs) { diff --git a/crypto/asn1/asn1.h b/crypto/asn1/asn1.h index c8fb6fa01c..87b022be53 100644 --- a/crypto/asn1/asn1.h +++ b/crypto/asn1/asn1.h @@ -321,7 +321,7 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) #define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print(BIO *out, stname *x, int indent, \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ const ASN1_PCTX *pctx); #define D2I_OF(type) type *(*)(type **,const unsigned char **,long) diff --git a/crypto/asn1/tasn_prn.c b/crypto/asn1/tasn_prn.c index 1c0379564a..3cc98ea7d2 100644 --- a/crypto/asn1/tasn_prn.c +++ b/crypto/asn1/tasn_prn.c @@ -58,6 +58,7 @@ #include +#include "cryptlib.h" #include #include #include @@ -66,8 +67,6 @@ #include #include "asn1_locl.h" -#include - /* Print routines. */ @@ -196,12 +195,25 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, const ASN1_TEMPLATE *tt; const ASN1_EXTERN_FUNCS *ef; ASN1_VALUE **tmpfld; + const ASN1_AUX *aux = it->funcs; + ASN1_aux_cb *asn1_cb; + ASN1_PRINT_ARG parg; int i; + if (aux && aux->asn1_cb) + { + parg.out = out; + parg.indent = indent; + parg.pctx = pctx; + asn1_cb = aux->asn1_cb; + } + else asn1_cb = 0; + if(*fld == NULL) { if (pctx->flags & ASN1_PCTX_FLAGS_SHOW_ABSENT) { - if (!nohdr && !asn1_print_fsname(out, indent, fname, sname, pctx)) + if (!nohdr && !asn1_print_fsname(out, indent, + fname, sname, pctx)) return 0; if (BIO_puts(out, "\n") <= 0) return 0; @@ -283,6 +295,15 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, } } + if (asn1_cb) + { + i = asn1_cb(ASN1_OP_PRINT_PRE, fld, it, &parg); + if (i == 0) + return 0; + if (i == 2) + return 1; + } + /* Print each field entry */ for(i = 0, tt = it->templates; i < it->tcount; i++, tt++) { @@ -298,6 +319,13 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, if (BIO_printf(out, "%*s}\n", indent, "") < 0) return 0; } + + if (asn1_cb) + { + i = asn1_cb(ASN1_OP_PRINT_POST, fld, it, &parg); + if (i == 0) + return 0; + } break; default: