Convert casted X509_INFO stacks to type-safe STACK_OF(X509_INFO).
authorRalf S. Engelschall <rse@openssl.org>
Tue, 4 May 1999 08:56:51 +0000 (08:56 +0000)
committerRalf S. Engelschall <rse@openssl.org>
Tue, 4 May 1999 08:56:51 +0000 (08:56 +0000)
PS: Feel free to move the IMPLEMENT_STACK_OF(X509_INFO) from
    crypto/asn1/x_info.c to any other place where you think it fits better.
    X509_INFO is a structure slightly spreaded over ASN.1, X509 and PEM code,
    so I found no definitive location for IMPLEMENT_STACK_OF(X509_INFO).  In
    crypto/asn1/x_info.c it's at least now bundled with X509_INFO_new() and
    friends.

CHANGES
apps/crl2p7.c
crypto/asn1/x_info.c
crypto/pem/pem.h
crypto/pem/pem_info.c
crypto/x509/x509.h

diff --git a/CHANGES b/CHANGES
index 16ae0af..18cc5f0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@
 
  Changes between 0.9.2b and 0.9.3
 
 
  Changes between 0.9.2b and 0.9.3
 
+  *) Convert casted X509_INFO stacks to type-safe STACK_OF(X509_INFO).
+     [Ralf S. Engelschall]
+
   *) New function SSL_CTX_use_certificate_chain_file that sets the
      "extra_cert"s in addition to the certificate.  (This makes sense
      only for "PEM" format files, as chains as a whole are not
   *) New function SSL_CTX_use_certificate_chain_file that sets the
      "extra_cert"s in addition to the certificate.  (This makes sense
      only for "PEM" format files, as chains as a whole are not
index 611046e..ba4eba1 100644 (file)
@@ -287,7 +287,7 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
        BIO *in=NULL;
        int count=0;
        int ret= -1;
        BIO *in=NULL;
        int count=0;
        int ret= -1;
-       STACK *sk=NULL;
+       STACK_OF(X509_INFO) *sk=NULL;
        X509_INFO *xi;
 
        if ((stat(certfile,&st) != 0))
        X509_INFO *xi;
 
        if ((stat(certfile,&st) != 0))
@@ -311,9 +311,9 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
        }
 
        /* scan over it and pull out the CRL's */
        }
 
        /* scan over it and pull out the CRL's */
-       while (sk_num(sk))
+       while (sk_X509_INFO_num(sk))
                {
                {
-               xi=(X509_INFO *)sk_shift(sk);
+               xi=sk_X509_INFO_shift(sk);
                if (xi->x509 != NULL)
                        {
                        sk_X509_push(stack,xi->x509);
                if (xi->x509 != NULL)
                        {
                        sk_X509_push(stack,xi->x509);
@@ -327,7 +327,7 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
 end:
        /* never need to Free x */
        if (in != NULL) BIO_free(in);
 end:
        /* never need to Free x */
        if (in != NULL) BIO_free(in);
-       if (sk != NULL) sk_free(sk);
+       if (sk != NULL) sk_X509_INFO_free(sk);
        return(ret);
        }
 
        return(ret);
        }
 
index 0ee9eb7..99ce011 100644 (file)
@@ -108,3 +108,6 @@ void X509_INFO_free(X509_INFO *x)
        if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey);
        Free((char *)x);
        }
        if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey);
        Free((char *)x);
        }
+
+IMPLEMENT_STACK_OF(X509_INFO)
+
index 6f0f09f..effa954 100644 (file)
@@ -331,7 +331,7 @@ char *      PEM_ASN1_read_bio(char *(*d2i)(),const char *name,BIO *bp,char **x,
 int    PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x,
                           const EVP_CIPHER *enc,unsigned char *kstr,int klen,
                           int (*callback)());
 int    PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x,
                           const EVP_CIPHER *enc,unsigned char *kstr,int klen,
                           int (*callback)());
-STACK *        PEM_X509_INFO_read_bio(BIO *bp, STACK *sk, int (*cb)());
+STACK_OF(X509_INFO) *  PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, int (*cb)());
 int    PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
                unsigned char *kstr, int klen, int (*cb)());
 #endif
 int    PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
                unsigned char *kstr, int klen, int (*cb)());
 #endif
@@ -345,7 +345,7 @@ char *      PEM_ASN1_read(char *(*d2i)(),const char *name,FILE *fp,char **x,
 int    PEM_ASN1_write(int (*i2d)(),const char *name,FILE *fp,char *x,
                       const EVP_CIPHER *enc,unsigned char *kstr,int klen,
                       int (*callback)());
 int    PEM_ASN1_write(int (*i2d)(),const char *name,FILE *fp,char *x,
                       const EVP_CIPHER *enc,unsigned char *kstr,int klen,
                       int (*callback)());
-STACK *        PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)());
+STACK_OF(X509_INFO) *  PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, int (*cb)());
 #endif
 
 int    PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
 #endif
 
 int    PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
index 83bdcf4..7f74bac 100644 (file)
 #include <openssl/pem.h>
 
 #ifndef NO_FP_API
 #include <openssl/pem.h>
 
 #ifndef NO_FP_API
-STACK *PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)())
+STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, int (*cb)())
        {
         BIO *b;
        {
         BIO *b;
-        STACK *ret;
+        STACK_OF(X509_INFO) *ret;
 
         if ((b=BIO_new(BIO_s_file())) == NULL)
                {
 
         if ((b=BIO_new(BIO_s_file())) == NULL)
                {
@@ -82,20 +82,20 @@ STACK *PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)())
        }
 #endif
 
        }
 #endif
 
-STACK *PEM_X509_INFO_read_bio(BIO *bp, STACK *sk, int (*cb)())
+STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, int (*cb)())
        {
        X509_INFO *xi=NULL;
        char *name=NULL,*header=NULL,**pp;
        unsigned char *data=NULL,*p;
        long len,error=0;
        int ok=0;
        {
        X509_INFO *xi=NULL;
        char *name=NULL,*header=NULL,**pp;
        unsigned char *data=NULL,*p;
        long len,error=0;
        int ok=0;
-       STACK *ret=NULL;
+       STACK_OF(X509_INFO) *ret=NULL;
        unsigned int i,raw;
        char *(*d2i)();
 
        if (sk == NULL)
                {
        unsigned int i,raw;
        char *(*d2i)();
 
        if (sk == NULL)
                {
-               if ((ret=sk_new_null()) == NULL)
+               if ((ret=sk_X509_INFO_new_null()) == NULL)
                        {
                        PEMerr(PEM_F_PEM_X509_INFO_READ_BIO,ERR_R_MALLOC_FAILURE);
                        goto err;
                        {
                        PEMerr(PEM_F_PEM_X509_INFO_READ_BIO,ERR_R_MALLOC_FAILURE);
                        goto err;
@@ -126,7 +126,7 @@ start:
                        d2i=(char *(*)())d2i_X509;
                        if (xi->x509 != NULL)
                                {
                        d2i=(char *(*)())d2i_X509;
                        if (xi->x509 != NULL)
                                {
-                               if (!sk_push(ret,(char *)xi)) goto err;
+                               if (!sk_X509_INFO_push(ret,xi)) goto err;
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
@@ -137,7 +137,7 @@ start:
                        d2i=(char *(*)())d2i_X509_CRL;
                        if (xi->crl != NULL)
                                {
                        d2i=(char *(*)())d2i_X509_CRL;
                        if (xi->crl != NULL)
                                {
-                               if (!sk_push(ret,(char *)xi)) goto err;
+                               if (!sk_X509_INFO_push(ret,xi)) goto err;
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
@@ -150,7 +150,7 @@ start:
                        d2i=(char *(*)())d2i_RSAPrivateKey;
                        if (xi->x_pkey != NULL) 
                                {
                        d2i=(char *(*)())d2i_RSAPrivateKey;
                        if (xi->x_pkey != NULL) 
                                {
-                               if (!sk_push(ret,(char *)xi)) goto err;
+                               if (!sk_X509_INFO_push(ret,xi)) goto err;
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
@@ -174,7 +174,7 @@ start:
                        d2i=(char *(*)())d2i_DSAPrivateKey;
                        if (xi->x_pkey != NULL) 
                                {
                        d2i=(char *(*)())d2i_DSAPrivateKey;
                        if (xi->x_pkey != NULL) 
                                {
-                               if (!sk_push(ret,(char *)xi)) goto err;
+                               if (!sk_X509_INFO_push(ret,xi)) goto err;
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
                                if ((xi=X509_INFO_new()) == NULL) goto err;
                                goto start;
                                }
@@ -240,7 +240,7 @@ start:
        if ((xi->x509 != NULL) || (xi->crl != NULL) ||
                (xi->x_pkey != NULL) || (xi->enc_data != NULL))
                {
        if ((xi->x509 != NULL) || (xi->crl != NULL) ||
                (xi->x_pkey != NULL) || (xi->enc_data != NULL))
                {
-               if (!sk_push(ret,(char *)xi)) goto err;
+               if (!sk_X509_INFO_push(ret,xi)) goto err;
                xi=NULL;
                }
        ok=1;
                xi=NULL;
                }
        ok=1;
@@ -248,12 +248,12 @@ err:
        if (xi != NULL) X509_INFO_free(xi);
        if (!ok)
                {
        if (xi != NULL) X509_INFO_free(xi);
        if (!ok)
                {
-               for (i=0; ((int)i)<sk_num(ret); i++)
+               for (i=0; ((int)i)<sk_X509_INFO_num(ret); i++)
                        {
                        {
-                       xi=(X509_INFO *)sk_value(ret,i);
+                       xi=sk_X509_INFO_value(ret,i);
                        X509_INFO_free(xi);
                        }
                        X509_INFO_free(xi);
                        }
-               if (ret != sk) sk_free(ret);
+               if (ret != sk) sk_X509_INFO_free(ret);
                ret=NULL;
                }
                
                ret=NULL;
                }
                
index 43ce3cf..fb9be71 100644 (file)
@@ -292,6 +292,8 @@ typedef struct X509_info_st
 
        int references;
        } X509_INFO;
 
        int references;
        } X509_INFO;
+
+DECLARE_STACK_OF(X509_INFO)
 #endif
 
 /* The next 2 structures and their 8 routines were sent to me by
 #endif
 
 /* The next 2 structures and their 8 routines were sent to me by