warning.
[oweals/openssl.git] / crypto / asn1 / t_x509.c
index 060f99d5a88f00c602d92e2b34cf63bcde207ee9..6ee1065ce9468c081f087d24dc3d2ecdf65c6e4f 100644 (file)
 
 #include <stdio.h>
 #include "cryptlib.h"
-#include "buffer.h"
-#include "bn.h"
+#include <openssl/buffer.h>
+#include <openssl/bn.h>
 #ifndef NO_RSA
-#include "rsa.h"
+#include <openssl/rsa.h>
 #endif
 #ifndef NO_DSA
-#include "dsa.h"
+#include <openssl/dsa.h>
 #endif
-#include "objects.h"
-#include "x509.h"
+#include <openssl/objects.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
 
 #ifndef NO_FP_API
-int X509_print_fp(fp,x)
-FILE *fp;
-X509 *x;
+int X509_print_fp(FILE *fp, X509 *x)
         {
         BIO *b;
         int ret;
@@ -89,9 +88,7 @@ X509 *x;
         }
 #endif
 
-int X509_print(bp,x)
-BIO *bp;
-X509 *x;
+int X509_print(BIO *bp, X509 *x)
        {
        long l;
        int ret=0,i,j,n;
@@ -99,7 +96,7 @@ X509 *x;
        X509_CINF *ci;
        ASN1_INTEGER *bs;
        EVP_PKEY *pkey=NULL;
-       char *neg;
+       const char *neg;
        X509_EXTENSION *ex;
        ASN1_STRING *str=NULL;
 
@@ -161,6 +158,7 @@ X509 *x;
        if (pkey == NULL)
                {
                BIO_printf(bp,"%12sUnable to load Public Key\n","");
+               ERR_print_errors(bp);
                }
        else
 #ifndef NO_RSA
@@ -190,50 +188,18 @@ X509 *x;
                BIO_printf(bp,"%8sX509v3 extensions:\n","");
                for (i=0; i<n; i++)
                        {
-                       int data_type,pack_type;
                        ASN1_OBJECT *obj;
-
                        ex=X509_get_ext(x,i);
                        if (BIO_printf(bp,"%12s","") <= 0) goto err;
                        obj=X509_EXTENSION_get_object(ex);
                        i2a_ASN1_OBJECT(bp,obj);
                        j=X509_EXTENSION_get_critical(ex);
-                       if (BIO_printf(bp,": %s\n%16s",j?"critical":"","") <= 0)
+                       if (BIO_printf(bp,": %s\n",j?"critical":"","") <= 0)
                                goto err;
-
-                       pack_type=X509v3_pack_type_by_OBJ(obj);
-                       data_type=X509v3_data_type_by_OBJ(obj);
-                       
-                       if (pack_type == X509_EXT_PACK_STRING)
-                               {
-                               if (X509v3_unpack_string(
-                                       &str,data_type,
-                                       X509_EXTENSION_get_data(ex)) == NULL)
-                                       {
-                                       /* hmm... */
-                                       goto err;
-                                       }
-                               if (    (data_type == V_ASN1_IA5STRING) ||
-                                       (data_type == V_ASN1_PRINTABLESTRING) ||
-                                       (data_type == V_ASN1_T61STRING))
-                                       {
-                                       if (BIO_write(bp,(char *)str->data,
-                                                       str->length) <= 0)
-                                               goto err;
-                                       }
-                               else if (data_type == V_ASN1_BIT_STRING)
-                                       {
-                                       BIO_printf(bp,"0x");
-                                       for (j=0; j<str->length; j++)
-                                               {
-                                               BIO_printf(bp,"%02X",
-                                                       str->data[j]);
-                                               }
-                                       }
-                               }
-                       else
+                       if(!X509V3_EXT_print(bp, ex, 0, 16))
                                {
-                               ASN1_OCTET_STRING_print(bp,ex->value);
+                               BIO_printf(bp, "%16s", "");
+                               M_ASN1_OCTET_STRING_print(bp,ex->value);
                                }
                        if (BIO_write(bp,"\n",1) <= 0) goto err;
                        }
@@ -253,16 +219,15 @@ X509 *x;
                        ((i+1) == n)?"":":") <= 0) goto err;
                }
        if (BIO_write(bp,"\n",1) != 1) goto err;
+       if (!X509_CERT_AUX_print(bp, x->aux, 0)) goto err;
        ret=1;
 err:
        if (str != NULL) ASN1_STRING_free(str);
-       if (m != NULL) Free((char *)m);
+       if (m != NULL) Free(m);
        return(ret);
        }
 
-int ASN1_STRING_print(bp,v)
-BIO *bp;
-ASN1_STRING *v;
+int ASN1_STRING_print(BIO *bp, ASN1_STRING *v)
        {
        int i,n;
        char buf[80],*p;;
@@ -291,9 +256,7 @@ ASN1_STRING *v;
        return(1);
        }
 
-int ASN1_TIME_print(bp, tm)
-BIO *bp;
-ASN1_TIME *tm;
+int ASN1_TIME_print(BIO *bp, ASN1_TIME *tm)
 {
        if(tm->type == V_ASN1_UTCTIME) return ASN1_UTCTIME_print(bp, tm);
        if(tm->type == V_ASN1_GENERALIZEDTIME)
@@ -302,16 +265,16 @@ ASN1_TIME *tm;
        return(0);
 }
 
+static const char *mon[12]=
+    {
+    "Jan","Feb","Mar","Apr","May","Jun",
+    "Jul","Aug","Sep","Oct","Nov","Dec"
+    };
 
-int ASN1_GENERALIZEDTIME_print(bp,tm)
-BIO *bp;
-ASN1_GENERALIZEDTIME *tm;
+int ASN1_GENERALIZEDTIME_print(BIO *bp, ASN1_GENERALIZEDTIME *tm)
        {
        char *v;
        int gmt=0;
-       static char *mon[12]={
-               "Jan","Feb","Mar","Apr","May","Jun",
-               "Jul","Aug","Sep","Oct","Nov","Dec"};
        int i;
        int y=0,M=0,d=0,h=0,m=0,s=0;
 
@@ -342,15 +305,10 @@ err:
        return(0);
        }
 
-int ASN1_UTCTIME_print(bp,tm)
-BIO *bp;
-ASN1_UTCTIME *tm;
+int ASN1_UTCTIME_print(BIO *bp, ASN1_UTCTIME *tm)
        {
        char *v;
        int gmt=0;
-       static char *mon[12]={
-               "Jan","Feb","Mar","Apr","May","Jun",
-               "Jul","Aug","Sep","Oct","Nov","Dec"};
        int i;
        int y=0,M=0,d=0,h=0,m=0,s=0;
 
@@ -382,10 +340,7 @@ err:
        return(0);
        }
 
-int X509_NAME_print(bp,name,obase)
-BIO *bp;
-X509_NAME *name;
-int obase;
+int X509_NAME_print(BIO *bp, X509_NAME *name, int obase)
        {
        char *s,*c;
        int ret=0,l,ll,i,first=1;
@@ -400,6 +355,7 @@ int obase;
        c=s;
        for (;;)
                {
+#ifndef CHARSET_EBCDIC
                if (    ((*s == '/') &&
                                ((s[1] >= 'A') && (s[1] <= 'Z') && (
                                        (s[2] == '=') ||
@@ -407,6 +363,15 @@ int obase;
                                        (s[3] == '='))
                                 ))) ||
                        (*s == '\0'))
+#else
+               if (    ((*s == '/') &&
+                               (isupper(s[1]) && (
+                                       (s[2] == '=') ||
+                                       (isupper(s[2]) &&
+                                       (s[3] == '='))
+                                ))) ||
+                       (*s == '\0'))
+#endif
                        {
                        if ((l <= 0) && !first)
                                {