diff --git a/CHANGES b/CHANGES index 16ae0afadfc42c43bce61a81afd80154d160d82f..18cc5f0d4a92dd41d5f33a33af19bddd4a06c8af 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,9 @@ 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 diff --git a/apps/crl2p7.c b/apps/crl2p7.c index 611046ecf51e4cff3f140f74329f96db2bbe7cb9..ba4eba16bf9ca1932dd5524ae80de0e9a00a1c89 100644 --- a/apps/crl2p7.c +++ b/apps/crl2p7.c @@ -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; - STACK *sk=NULL; + STACK_OF(X509_INFO) *sk=NULL; 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 */ - 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); @@ -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); - if (sk != NULL) sk_free(sk); + if (sk != NULL) sk_X509_INFO_free(sk); return(ret); } diff --git a/crypto/asn1/x_info.c b/crypto/asn1/x_info.c index 0ee9eb7955565dcda36336773d167e8a8fc0480f..99ce011f075f36818a4021608f726ba253233009 100644 --- a/crypto/asn1/x_info.c +++ b/crypto/asn1/x_info.c @@ -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); } + +IMPLEMENT_STACK_OF(X509_INFO) + diff --git a/crypto/pem/pem.h b/crypto/pem/pem.h index 6f0f09fcbe9100d0143e2a4ecd3e405d0318f30a..effa9545a482f37cccd9c3ca3659566667800518 100644 --- a/crypto/pem/pem.h +++ b/crypto/pem/pem.h @@ -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)()); -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 @@ -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)()); -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, diff --git a/crypto/pem/pem_info.c b/crypto/pem/pem_info.c index 83bdcf492f1ee99de7808c44a857fb2d0ed3f1a5..7f74bac351bdabd542004aaf51b98aac81aadbeb 100644 --- a/crypto/pem/pem_info.c +++ b/crypto/pem/pem_info.c @@ -65,10 +65,10 @@ #include #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; - STACK *ret; + STACK_OF(X509_INFO) *ret; if ((b=BIO_new(BIO_s_file())) == NULL) { @@ -82,20 +82,20 @@ STACK *PEM_X509_INFO_read(FILE *fp, STACK *sk, int (*cb)()) } #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; - STACK *ret=NULL; + STACK_OF(X509_INFO) *ret=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; @@ -126,7 +126,7 @@ start: 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; } @@ -137,7 +137,7 @@ start: 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; } @@ -150,7 +150,7 @@ start: 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; } @@ -174,7 +174,7 @@ start: 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; } @@ -240,7 +240,7 @@ start: 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; @@ -248,12 +248,12 @@ err: if (xi != NULL) X509_INFO_free(xi); if (!ok) { - for (i=0; ((int)i)