if (!crd->c_cert_ext)
crd->c_cert_ext = sk_X509_EXTENSION_new_null();
- sk_X509_EXTENSION_push(crd->c_cert_ext, cert_ext);
+ sk_X509_EXTENSION_push(crd->c_cert_ext, X509_EXTENSION_dup(cert_ext));
return 0;
}
int ret = 0;
int o_ret = 0;
unsigned long ssl_err = 0;
+ int n_certs = 0;
+ int i = 0;
X509 *cert_from_chain = NULL;
if (!ctx)
goto end;
}
- while ((cert_from_chain = sk_X509_pop(crd->c_cert_chain)) != NULL) {
- ret = PEM_write_X509(cert_file, cert_from_chain);
- if (!ret) {
- ssl_err = ERR_get_error();
- ret = set_error(cc, ssl_err, SSL_ERROR, "Error while writing"
- " the certificate to the file");
- goto end;
+ n_certs = sk_X509_num(crd->c_cert_chain);
+ for (i = 0; i < n_certs; i++){
+ cert_from_chain = sk_X509_value(crd->c_cert_chain, i);
+ if (cert_from_chain) {
+ ret = PEM_write_X509(cert_file, cert_from_chain);
+ if (!ret) {
+ ssl_err = ERR_get_error();
+ if (ssl_err)
+ ret = set_error(cc, ssl_err, SSL_ERROR, "Error "
+ " while writing the certificate to the file");
+ goto end;
+ }
}
}
-
if (fclose(cert_file)){
ret = errno;
set_error(cc, ret, POSIX_ERROR, "cannot close file with certificate");