Commit 20b85fdd authored by Ralf S. Engelschall's avatar Ralf S. Engelschall
Browse files

Convert casted X509_INFO stacks to type-safe STACK_OF(X509_INFO).

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.
parent 0f3e6045
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+4 −4
Original line number Diff line number Diff line
@@ -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);
	}
+3 −0
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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,
+13 −13
Original line number Diff line number Diff line
@@ -65,10 +65,10 @@
#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;
        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)<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);
			}
		if (ret != sk) sk_free(ret);
		if (ret != sk) sk_X509_INFO_free(ret);
		ret=NULL;
		}
		
Loading