ret = BIO_read(bio, buf, (int)max_length);
} while (ret <= 0 && BIO_should_retry(bio));
+ if (BIO_get_ssl(bio, &ssl) == 1)
+ {
+ fd = SSL_get_fd(ssl);
+ }
+
if (ret < 0)
{
log_ssl_errors(LOG_LEVEL_ERROR,
return -1;
}
- if (BIO_get_ssl(bio, &ssl) == 1)
- {
- fd = SSL_get_fd(ssl);
- }
-
log_error(LOG_LEVEL_RECEIVED, "TLS from socket %d: %N",
fd, ret, buf);
}
else
{
+ int i;
if (bs->type == V_ASN1_NEG_INTEGER)
{
if (BIO_puts(bio, " (Negative)") < 0)
goto exit;
}
}
- for (int i = 0; i < bs->length; i++)
+ for (i = 0; i < bs->length; i++)
{
if (BIO_printf(bio, "%02x%c", bs->data[i],
((i + 1 == bs->length) ? '\n' : ':')) <= 0)
BIO_write(bio, &zero, 1);
len = BIO_get_mem_data(bio, &bio_mem_data);
+ if (len <= 0)
+ {
+ log_error(LOG_LEVEL_ERROR, "BIO_get_mem_data() returned %d "
+ "while gathering certificate information", len);
+ ret = -1;
+ goto exit;
+ }
encoded_text = html_encode(bio_mem_data);
if (encoded_text == NULL)
{
struct ssl_attr *ssl_attr = &csp->ssl_client_attr;
/* Paths to certificates file and key file */
char *key_file = NULL;
- char *ca_file = NULL;
char *cert_file = NULL;
int ret = 0;
SSL *ssl;
/*
* Preparing paths to certificates files and key file
*/
- ca_file = csp->config->ca_cert_file;
cert_file = make_certs_path(csp->config->certificate_directory,
(const char *)csp->http->hash_of_host_hex, CERT_FILE_TYPE);
key_file = make_certs_path(csp->config->certificate_directory,
chain = SSL_get_peer_cert_chain(ssl);
if (chain)
{
- for (int i = 0; i < sk_X509_num(chain); i++)
+ int i;
+ for (i = 0; i < sk_X509_num(chain); i++)
{
if (ssl_store_cert(csp, sk_X509_value(chain, i)) != 0)
{
const unsigned char *src, size_t slen)
{
*olen = 4 * ((slen/3) + ((slen%3) ? 1 : 0)) + 1;
- if (*olen < dlen)
+ if (*olen > dlen)
{
return ENOBUFS;
}
if (!(cert = ssl_certificate_load(cert_file)))
{
- log_ssl_errors(LOG_LEVEL_ERROR,
- "Error reading certificate file %s", cert_file);
return 1;
}
* 3 : nid = OpenSSL NID
* 4 : value = extension value
*
- * Returns : 0 => Error while setting extensuon data
+ * Returns : 0 => Error while setting extension data
* 1 => It worked
*
*********************************************************************/
}
}
+ if (file_exists(cert_opt.output_file) == 0 &&
+ file_exists(cert_opt.subject_key) == 1)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "A website key already exists but there's no matching certificate. "
+ "Removing %s before creating a new key and certificate.",
+ cert_opt.subject_key);
+ if (unlink(cert_opt.subject_key))
+ {
+ log_error(LOG_LEVEL_ERROR, "Failed to unlink %s: %E",
+ cert_opt.subject_key);
+
+ freez(cert_opt.output_file);
+ freez(cert_opt.subject_key);
+
+ return -1;
+ }
+ }
+
/*
* Create key for requested host
*/