mirror of https://github.com/openssl/openssl.git
				
				
				
			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.
			
			
This commit is contained in:
		
							parent
							
								
									0f3e604589
								
							
						
					
					
						commit
						20b85fdd76
					
				
							
								
								
									
										3
									
								
								CHANGES
								
								
								
								
							
							
						
						
									
										3
									
								
								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 | ||||
|  |  | |||
|  | @ -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); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -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) | ||||
| 
 | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
|  | @ -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; | ||||
| 		} | ||||
| 		 | ||||
|  |  | |||
|  | @ -292,6 +292,8 @@ typedef struct X509_info_st | |||
| 
 | ||||
| 	int references; | ||||
| 	} X509_INFO; | ||||
| 
 | ||||
| DECLARE_STACK_OF(X509_INFO) | ||||
| #endif | ||||
| 
 | ||||
| /* The next 2 structures and their 8 routines were sent to me by
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue