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
|
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
|
*) New function SSL_CTX_use_certificate_chain_file that sets the
|
||||||
"extra_cert"s in addition to the certificate. (This makes sense
|
"extra_cert"s in addition to the certificate. (This makes sense
|
||||||
only for "PEM" format files, as chains as a whole are not
|
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;
|
BIO *in=NULL;
|
||||||
int count=0;
|
int count=0;
|
||||||
int ret= -1;
|
int ret= -1;
|
||||||
STACK *sk=NULL;
|
STACK_OF(X509_INFO) *sk=NULL;
|
||||||
X509_INFO *xi;
|
X509_INFO *xi;
|
||||||
|
|
||||||
if ((stat(certfile,&st) != 0))
|
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)
|
if (xi->x509 != NULL)
|
||||||
{
|
{
|
||||||
sk_X509_push(stack,xi->x509);
|
sk_X509_push(stack,xi->x509);
|
||||||
@ -327,7 +327,7 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
|
|||||||
end:
|
end:
|
||||||
/* never need to Free x */
|
/* never need to Free x */
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL) BIO_free(in);
|
||||||
if (sk != NULL) sk_free(sk);
|
if (sk != NULL) sk_X509_INFO_free(sk);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,3 +108,6 @@ void X509_INFO_free(X509_INFO *x)
|
|||||||
if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey);
|
if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey);
|
||||||
Free((char *)x);
|
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,
|
int PEM_ASN1_write_bio(int (*i2d)(),const char *name,BIO *bp,char *x,
|
||||||
const EVP_CIPHER *enc,unsigned char *kstr,int klen,
|
const EVP_CIPHER *enc,unsigned char *kstr,int klen,
|
||||||
int (*callback)());
|
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,
|
int PEM_X509_INFO_write_bio(BIO *bp,X509_INFO *xi, EVP_CIPHER *enc,
|
||||||
unsigned char *kstr, int klen, int (*cb)());
|
unsigned char *kstr, int klen, int (*cb)());
|
||||||
#endif
|
#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,
|
int PEM_ASN1_write(int (*i2d)(),const char *name,FILE *fp,char *x,
|
||||||
const EVP_CIPHER *enc,unsigned char *kstr,int klen,
|
const EVP_CIPHER *enc,unsigned char *kstr,int klen,
|
||||||
int (*callback)());
|
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
|
#endif
|
||||||
|
|
||||||
int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
|
int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,
|
||||||
|
@ -65,10 +65,10 @@
|
|||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
#ifndef NO_FP_API
|
#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;
|
X509_INFO *xi=NULL;
|
||||||
char *name=NULL,*header=NULL,**pp;
|
char *name=NULL,*header=NULL,**pp;
|
||||||
unsigned char *data=NULL,*p;
|
unsigned char *data=NULL,*p;
|
||||||
long len,error=0;
|
long len,error=0;
|
||||||
int ok=0;
|
int ok=0;
|
||||||
STACK *ret=NULL;
|
STACK_OF(X509_INFO) *ret=NULL;
|
||||||
unsigned int i,raw;
|
unsigned int i,raw;
|
||||||
char *(*d2i)();
|
char *(*d2i)();
|
||||||
|
|
||||||
if (sk == NULL)
|
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);
|
PEMerr(PEM_F_PEM_X509_INFO_READ_BIO,ERR_R_MALLOC_FAILURE);
|
||||||
goto err;
|
goto err;
|
||||||
@ -126,7 +126,7 @@ start:
|
|||||||
d2i=(char *(*)())d2i_X509;
|
d2i=(char *(*)())d2i_X509;
|
||||||
if (xi->x509 != NULL)
|
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;
|
if ((xi=X509_INFO_new()) == NULL) goto err;
|
||||||
goto start;
|
goto start;
|
||||||
}
|
}
|
||||||
@ -137,7 +137,7 @@ start:
|
|||||||
d2i=(char *(*)())d2i_X509_CRL;
|
d2i=(char *(*)())d2i_X509_CRL;
|
||||||
if (xi->crl != NULL)
|
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;
|
if ((xi=X509_INFO_new()) == NULL) goto err;
|
||||||
goto start;
|
goto start;
|
||||||
}
|
}
|
||||||
@ -150,7 +150,7 @@ start:
|
|||||||
d2i=(char *(*)())d2i_RSAPrivateKey;
|
d2i=(char *(*)())d2i_RSAPrivateKey;
|
||||||
if (xi->x_pkey != NULL)
|
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;
|
if ((xi=X509_INFO_new()) == NULL) goto err;
|
||||||
goto start;
|
goto start;
|
||||||
}
|
}
|
||||||
@ -174,7 +174,7 @@ start:
|
|||||||
d2i=(char *(*)())d2i_DSAPrivateKey;
|
d2i=(char *(*)())d2i_DSAPrivateKey;
|
||||||
if (xi->x_pkey != NULL)
|
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;
|
if ((xi=X509_INFO_new()) == NULL) goto err;
|
||||||
goto start;
|
goto start;
|
||||||
}
|
}
|
||||||
@ -240,7 +240,7 @@ start:
|
|||||||
if ((xi->x509 != NULL) || (xi->crl != NULL) ||
|
if ((xi->x509 != NULL) || (xi->crl != NULL) ||
|
||||||
(xi->x_pkey != NULL) || (xi->enc_data != 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;
|
xi=NULL;
|
||||||
}
|
}
|
||||||
ok=1;
|
ok=1;
|
||||||
@ -248,12 +248,12 @@ err:
|
|||||||
if (xi != NULL) X509_INFO_free(xi);
|
if (xi != NULL) X509_INFO_free(xi);
|
||||||
if (!ok)
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,6 +292,8 @@ typedef struct X509_info_st
|
|||||||
|
|
||||||
int references;
|
int references;
|
||||||
} X509_INFO;
|
} X509_INFO;
|
||||||
|
|
||||||
|
DECLARE_STACK_OF(X509_INFO)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The next 2 structures and their 8 routines were sent to me by
|
/* The next 2 structures and their 8 routines were sent to me by
|
||||||
|
Loading…
x
Reference in New Issue
Block a user