clear error queue on success and return NULL if cert could be read
PR: 1088
This commit is contained in:
parent
5c567ffd4c
commit
0dfe532ea9
1 changed files with 13 additions and 3 deletions
|
@ -616,14 +616,13 @@ STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file)
|
|||
BIO *in;
|
||||
X509 *x=NULL;
|
||||
X509_NAME *xn=NULL;
|
||||
STACK_OF(X509_NAME) *ret,*sk;
|
||||
STACK_OF(X509_NAME) *ret = NULL,*sk;
|
||||
|
||||
ret=sk_X509_NAME_new_null();
|
||||
sk=sk_X509_NAME_new(xname_cmp);
|
||||
|
||||
in=BIO_new(BIO_s_file_internal());
|
||||
|
||||
if ((ret == NULL) || (sk == NULL) || (in == NULL))
|
||||
if ((sk == NULL) || (in == NULL))
|
||||
{
|
||||
SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
|
@ -636,6 +635,15 @@ STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file)
|
|||
{
|
||||
if (PEM_read_bio_X509(in,&x,NULL,NULL) == NULL)
|
||||
break;
|
||||
if (ret == NULL)
|
||||
{
|
||||
ret = sk_X509_NAME_new_null();
|
||||
if (ret == NULL)
|
||||
{
|
||||
SSLerr(SSL_F_SSL_LOAD_CLIENT_CA_FILE,ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if ((xn=X509_get_subject_name(x)) == NULL) goto err;
|
||||
/* check for duplicates */
|
||||
xn=X509_NAME_dup(xn);
|
||||
|
@ -658,6 +666,8 @@ err:
|
|||
if (sk != NULL) sk_X509_NAME_free(sk);
|
||||
if (in != NULL) BIO_free(in);
|
||||
if (x != NULL) X509_free(x);
|
||||
if (ret != NULL)
|
||||
ERR_clear_error();
|
||||
return(ret);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue