summaryrefslogtreecommitdiff
path: root/crypto/asn1/tasn_prn.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2005-09-03 00:40:40 +0000
committerDr. Stephen Henson <steve@openssl.org>2005-09-03 00:40:40 +0000
commitc11c64fbe0c0d3d8eb3bdbda368805dc58d55b90 (patch)
treec7666fdff760b7b942e51f0e43b87a5047e209dc /crypto/asn1/tasn_prn.c
parentf022c177db230e49a4599795a6be2758f350f108 (diff)
downloadopenssl-new-c11c64fbe0c0d3d8eb3bdbda368805dc58d55b90.tar.gz
Update to ASN1 printing code.
Diffstat (limited to 'crypto/asn1/tasn_prn.c')
-rw-r--r--crypto/asn1/tasn_prn.c34
1 files changed, 31 insertions, 3 deletions
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 <stddef.h>
+#include "cryptlib.h"
#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#include <openssl/objects.h>
@@ -66,8 +67,6 @@
#include <openssl/x509v3.h>
#include "asn1_locl.h"
-#include <string.h>
-
/* 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, "<ABSENT>\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: