int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs)
{
- int i;
if (ctx->certs)
{
ctx->certs = NULL;
}
if (!certs) return 1;
- if (!(ctx->certs = sk_X509_dup(certs)))
+ if (!(ctx->certs = X509_chain_up_ref(certs)))
{
TSerr(TS_F_TS_RESP_CTX_SET_CERTS, ERR_R_MALLOC_FAILURE);
return 0;
}
- for (i = 0; i < sk_X509_num(ctx->certs); ++i)
- {
- X509 *cert = sk_X509_value(ctx->certs, i);
- CRYPTO_add(&cert->references, +1, CRYPTO_LOCK_X509);
- }
return 1;
}
if (!result)
{
TSerr(TS_F_TS_RESP_CREATE_RESPONSE, TS_R_RESPONSE_SETUP_ERROR);
- if (ctx != NULL)
+ if (ctx->response != NULL)
{
- TS_RESP_CTX_set_status_info_cond(ctx,
+ if (TS_RESP_CTX_set_status_info_cond(ctx,
TS_STATUS_REJECTION, "Error during response "
- "generation.");
- /* Check if the status info was set. */
- if (ctx->response && ASN1_INTEGER_get(
- TS_RESP_get_status_info(ctx->response)->status)
- == TS_STATUS_GRANTED)
+ "generation.") == 0)
{
- /* Status info wasn't set, don't
- * return a response. */
TS_RESP_free(ctx->response);
ctx->response = NULL;
}
if (precision > 0)
{
/* Add fraction of seconds (leave space for dot and null). */
- BIO_snprintf(p, 2 + precision, ".%ld", usec);
+ BIO_snprintf(p, 2 + precision, ".%06ld", usec);
/* We cannot use the snprintf return value,
because it might have been truncated. */
p += strlen(p);