Fix memory leak in GENERAL_NAME_set0_othername.
[openssl.git] / crypto / asn1 / t_crl.c
index d36b0c23afc782322e4bf51ee900a189e0d042bf..0dfaf0ba26e01d98c4f0e553e0a49c6f45ba598a 100644 (file)
@@ -1,6 +1,7 @@
 /* t_crl.c */
-/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
- * project 1999.
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
+ * 1999.
  */
 /* ====================================================================
  * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
@@ -10,7 +11,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
 
 #include <stdio.h>
 #include "cryptlib.h"
-#include "buffer.h"
-#include "bn.h"
-#include "objects.h"
-#include "x509.h"
-#include "x509v3.h"
-
-#ifndef NOPROTO
-static void ext_print(BIO *out, X509_EXTENSION *ex);
-#else
-static void ext_print();
-#endif
-
-#ifndef NO_FP_API
-int X509_CRL_print_fp(fp,x)
-FILE *fp;
-X509_CRL *x;
-        {
-        BIO *b;
-        int ret;
-
-        if ((b=BIO_new(BIO_s_file())) == NULL)
-               {
-               X509err(X509_F_X509_PRINT_FP,ERR_R_BUF_LIB);
-                return(0);
-               }
-        BIO_set_fp(b,fp,BIO_NOCLOSE);
-        ret=X509_CRL_print(b, x);
-        BIO_free(b);
-        return(ret);
-        }
-#endif
-
-int X509_CRL_print(out, x)
-BIO *out;
-X509_CRL *x;
+#include <openssl/buffer.h>
+#include <openssl/bn.h>
+#include <openssl/objects.h>
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+
+#ifndef OPENSSL_NO_FP_API
+int X509_CRL_print_fp(FILE *fp, X509_CRL *x)
 {
-       char buf[256];
-       unsigned char *s;
-       STACK *rev;
-       X509_REVOKED *r;
-       long l;
-       int i, j, n;
-
-       BIO_printf(out, "Certificate Revocation List (CRL):\n");
-       l = X509_CRL_get_version(x);
-       BIO_printf(out, "%8sVersion %lu (0x%lx)\n", "", l+1, l);
-       i = OBJ_obj2nid(x->sig_alg->algorithm);
-       BIO_printf(out, "%8sSignature Algorithm: %s\n", "",
-                                (i == NID_undef) ? "NONE" : OBJ_nid2ln(i));
-       X509_NAME_oneline(X509_CRL_get_issuer(x),buf,256);
-       BIO_printf(out,"%8sIssuer: %s\n","",buf);
-       BIO_printf(out,"%8sLast Update: ","");
-       ASN1_TIME_print(out,X509_CRL_get_lastUpdate(x));
-       BIO_printf(out,"\n%8sNext Update: ","");
-       if (X509_CRL_get_nextUpdate(x))
-                ASN1_TIME_print(out,X509_CRL_get_nextUpdate(x));
-       else BIO_printf(out,"NONE");
-       BIO_printf(out,"\n");
-
-       n=X509_CRL_get_ext_count(x);
-       if (n > 0) {
-               BIO_printf(out,"%8sCRL extensions:\n","");
-               for (i=0; i<n; i++) ext_print(out, X509_CRL_get_ext(x, i));
-       }
-
-
-       rev = X509_CRL_get_REVOKED(x);
-
-       if(sk_num(rev)) BIO_printf(out, "Revoked Certificates:\n");
-       else BIO_printf(out, "No Revoked Certificates.\n");
-
-       for(i = 0; i < sk_num(rev); i++) {
-               r = (X509_REVOKED *) sk_value(rev, i);
-               BIO_printf(out,"    Serial Number: ");
-               i2a_ASN1_INTEGER(out,r->serialNumber);
-               BIO_printf(out,"\n        Revocation Date: ","");
-               ASN1_TIME_print(out,r->revocationDate);
-               BIO_printf(out,"\n");
-               for(j = 0; j < X509_REVOKED_get_ext_count(r); j++)
-                               ext_print(out, X509_REVOKED_get_ext(r, j));
-       }
-
-       i=OBJ_obj2nid(x->sig_alg->algorithm);
-       BIO_printf(out,"    Signature Algorithm: %s",
-                               (i == NID_undef)?"UNKNOWN":OBJ_nid2ln(i));
-
-       s = x->signature->data;
-       n = x->signature->length;
-       for (i=0; i<n; i++, s++)
-       {
-               if ((i%18) == 0) BIO_write(out,"\n        ",9);
-               BIO_printf(out,"%02x%s",*s, ((i+1) == n)?"":":");
-       }
-       BIO_write(out,"\n",1);
-
-       return 1;
-
+    BIO *b;
+    int ret;
+
+    if ((b = BIO_new(BIO_s_file())) == NULL) {
+        X509err(X509_F_X509_CRL_PRINT_FP, ERR_R_BUF_LIB);
+        return (0);
+    }
+    BIO_set_fp(b, fp, BIO_NOCLOSE);
+    ret = X509_CRL_print(b, x);
+    BIO_free(b);
+    return (ret);
 }
+#endif
 
-static void ext_print(out, ex)
-BIO *out;
-X509_EXTENSION *ex;
+int X509_CRL_print(BIO *out, X509_CRL *x)
 {
-       ASN1_OBJECT *obj;
-       int j;
-       BIO_printf(out,"%12s","");
-       obj=X509_EXTENSION_get_object(ex);
-       i2a_ASN1_OBJECT(out,obj);
-       j=X509_EXTENSION_get_critical(ex);
-       BIO_printf(out, ": %s\n%16s", j ? "critical":"","");
-       if(!X509V3_EXT_print(out, ex, 0))
-                                ASN1_OCTET_STRING_print(out,ex->value);
-       BIO_write(out,"\n",1);
+    STACK_OF(X509_REVOKED) *rev;
+    X509_REVOKED *r;
+    long l;
+    int i;
+    char *p;
+
+    BIO_printf(out, "Certificate Revocation List (CRL):\n");
+    l = X509_CRL_get_version(x);
+    BIO_printf(out, "%8sVersion %lu (0x%lx)\n", "", l + 1, l);
+    i = OBJ_obj2nid(x->sig_alg->algorithm);
+    X509_signature_print(out, x->sig_alg, NULL);
+    p = X509_NAME_oneline(X509_CRL_get_issuer(x), NULL, 0);
+    BIO_printf(out, "%8sIssuer: %s\n", "", p);
+    OPENSSL_free(p);
+    BIO_printf(out, "%8sLast Update: ", "");
+    ASN1_TIME_print(out, X509_CRL_get_lastUpdate(x));
+    BIO_printf(out, "\n%8sNext Update: ", "");
+    if (X509_CRL_get_nextUpdate(x))
+        ASN1_TIME_print(out, X509_CRL_get_nextUpdate(x));
+    else
+        BIO_printf(out, "NONE");
+    BIO_printf(out, "\n");
+
+    X509V3_extensions_print(out, "CRL extensions", x->crl->extensions, 0, 8);
+
+    rev = X509_CRL_get_REVOKED(x);
+
+    if (sk_X509_REVOKED_num(rev) > 0)
+        BIO_printf(out, "Revoked Certificates:\n");
+    else
+        BIO_printf(out, "No Revoked Certificates.\n");
+
+    for (i = 0; i < sk_X509_REVOKED_num(rev); i++) {
+        r = sk_X509_REVOKED_value(rev, i);
+        BIO_printf(out, "    Serial Number: ");
+        i2a_ASN1_INTEGER(out, r->serialNumber);
+        BIO_printf(out, "\n        Revocation Date: ");
+        ASN1_TIME_print(out, r->revocationDate);
+        BIO_printf(out, "\n");
+        X509V3_extensions_print(out, "CRL entry extensions",
+                                r->extensions, 0, 8);
+    }
+    X509_signature_print(out, x->sig_alg, x->signature);
+
+    return 1;
+
 }