Move algorithm specific print code from crypto/asn1/t_pkey.c to separate
[oweals/openssl.git] / crypto / asn1 / x_name.c
index b4f12a65710290be299f2dcc9e85ec686015732e..8701c54114b784148a358b13c592c4c80fb9f696 100644 (file)
@@ -60,6 +60,7 @@
 #include "cryptlib.h"
 #include <openssl/asn1t.h>
 #include <openssl/x509.h>
+#include "asn1_locl.h"
 
 static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it,
                                        int tag, int aclass, char opt, ASN1_TLC *ctx);
@@ -70,6 +71,12 @@ static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it);
 
 static int x509_name_encode(X509_NAME *a);
 
+
+static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval,
+                                               int indent,
+                                               const char *fname, 
+                                               const ASN1_PCTX *pctx);
+
 ASN1_SEQUENCE(X509_NAME_ENTRY) = {
        ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT),
        ASN1_SIMPLE(X509_NAME_ENTRY, value, ASN1_PRINTABLE)
@@ -102,7 +109,8 @@ const ASN1_EXTERN_FUNCS x509_name_ff = {
        x509_name_ex_free,
        0,      /* Default clear behaviour is OK */
        x509_name_ex_d2i,
-       x509_name_ex_i2d
+       x509_name_ex_i2d,
+       x509_name_ex_print
 };
 
 IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff) 
@@ -123,7 +131,7 @@ static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it)
        return 1;
 
  memerr:
-       ASN1err(ASN1_F_X509_NAME_NEW, ERR_R_MALLOC_FAILURE);
+       ASN1err(ASN1_F_X509_NAME_EX_NEW, ERR_R_MALLOC_FAILURE);
        if (ret)
                {
                if (ret->entries)
@@ -197,7 +205,7 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len
        *in = p;
        return ret;
        err:
-       ASN1err(ASN1_F_D2I_X509_NAME, ERR_R_NESTED_ASN1_ERROR);
+       ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
        return 0;
 }
 
@@ -248,10 +256,21 @@ static int x509_name_encode(X509_NAME *a)
        return len;
        memerr:
        sk_pop_free(intname, sk_internal_free);
-       ASN1err(ASN1_F_D2I_X509_NAME, ERR_R_MALLOC_FAILURE);
+       ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE);
        return -1;
 }
 
+static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval,
+                                               int indent,
+                                               const char *fname, 
+                                               const ASN1_PCTX *pctx)
+       {
+       if (X509_NAME_print_ex(out, (X509_NAME *)*pval,
+                                       indent, pctx->nm_flags) <= 0)
+               return 0;
+       return 2;
+       }
+
 
 int X509_NAME_set(X509_NAME **xn, X509_NAME *name)
        {