Fix typo in ssl/d1_pkt.c.
[openssl.git] / ssl / ssl_cert.c
index b515c064a81fdd5e28e6974c0dd59ef78ee22157..0c9bd073784c44f10403c9164162e3f29ae73c14 100644 (file)
@@ -563,12 +563,12 @@ void SSL_CTX_set_client_CA_list(SSL_CTX *ctx,STACK_OF(X509_NAME) *name_list)
        set_client_CA_list(&(ctx->client_CA),name_list);
        }
 
-STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(SSL_CTX *ctx)
+STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *ctx)
        {
        return(ctx->client_CA);
        }
 
-STACK_OF(X509_NAME) *SSL_get_client_CA_list(SSL *s)
+STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s)
        {
        if (s->type == SSL_ST_CONNECT)
                { /* we are in the client */
@@ -635,14 +635,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;
@@ -655,6 +654,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);
@@ -677,6 +685,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