diff options
Diffstat (limited to 'src/lib/libtls/tls_ocsp.c')
| -rw-r--r-- | src/lib/libtls/tls_ocsp.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/lib/libtls/tls_ocsp.c b/src/lib/libtls/tls_ocsp.c index 2da88f4281..9ed60a2aa9 100644 --- a/src/lib/libtls/tls_ocsp.c +++ b/src/lib/libtls/tls_ocsp.c | |||
| @@ -50,8 +50,6 @@ tls_ocsp_free(struct tls_ocsp *ocsp) | |||
| 50 | ocsp->ocsp_result = NULL; | 50 | ocsp->ocsp_result = NULL; |
| 51 | free(ocsp->ocsp_url); | 51 | free(ocsp->ocsp_url); |
| 52 | ocsp->ocsp_url = NULL; | 52 | ocsp->ocsp_url = NULL; |
| 53 | free(ocsp->request_data); | ||
| 54 | ocsp->request_data = NULL; | ||
| 55 | free(ocsp); | 53 | free(ocsp); |
| 56 | } | 54 | } |
| 57 | 55 | ||
| @@ -322,6 +320,38 @@ tls_ocsp_verify_cb(SSL *ssl, void *arg) | |||
| 322 | return (res == 0) ? 1 : 0; | 320 | return (res == 0) ? 1 : 0; |
| 323 | } | 321 | } |
| 324 | 322 | ||
| 323 | |||
| 324 | /* Staple the OCSP information in ctx->ocsp to the server handshake. */ | ||
| 325 | int | ||
| 326 | tls_ocsp_stapling_cb(SSL *ssl, void *arg) | ||
| 327 | { | ||
| 328 | struct tls *ctx; | ||
| 329 | unsigned char *ocsp_staple = NULL; | ||
| 330 | int ret = SSL_TLSEXT_ERR_ALERT_FATAL; | ||
| 331 | |||
| 332 | if ((ctx = SSL_get_app_data(ssl)) == NULL) | ||
| 333 | goto err; | ||
| 334 | |||
| 335 | if (ctx->config->ocsp_staple == NULL || | ||
| 336 | ctx->config->ocsp_staple_len == 0) | ||
| 337 | return SSL_TLSEXT_ERR_NOACK; | ||
| 338 | |||
| 339 | if ((ocsp_staple = malloc(ctx->config->ocsp_staple_len)) == NULL) | ||
| 340 | goto err; | ||
| 341 | |||
| 342 | memcpy(ocsp_staple, ctx->config->ocsp_staple, | ||
| 343 | ctx->config->ocsp_staple_len); | ||
| 344 | if (SSL_set_tlsext_status_ocsp_resp(ctx->ssl_conn, ocsp_staple, | ||
| 345 | ctx->config->ocsp_staple_len) != 1) | ||
| 346 | goto err; | ||
| 347 | |||
| 348 | ret = SSL_TLSEXT_ERR_OK; | ||
| 349 | err: | ||
| 350 | if (ret != SSL_TLSEXT_ERR_OK) | ||
| 351 | free(ocsp_staple); | ||
| 352 | return ret; | ||
| 353 | } | ||
| 354 | |||
| 325 | /* | 355 | /* |
| 326 | * Public API | 356 | * Public API |
| 327 | */ | 357 | */ |
