| 91 | } |
| 92 | |
| 93 | static X509 *stapling_get_issuer(modssl_ctx_t *mctx, X509 *x) |
| 94 | { |
| 95 | X509 *issuer = NULL; |
| 96 | int i; |
| 97 | X509_STORE *st = SSL_CTX_get_cert_store(mctx->ssl_ctx); |
| 98 | X509_STORE_CTX *inctx; |
| 99 | STACK_OF(X509) *extra_certs = NULL; |
| 100 | |
| 101 | #ifdef OPENSSL_NO_SSL_INTERN |
| 102 | SSL_CTX_get_extra_chain_certs(mctx->ssl_ctx, &extra_certs); |
| 103 | #else |
| 104 | extra_certs = mctx->ssl_ctx->extra_certs; |
| 105 | #endif |
| 106 | |
| 107 | for (i = 0; i < sk_X509_num(extra_certs); i++) { |
| 108 | issuer = sk_X509_value(extra_certs, i); |
| 109 | if (X509_check_issued(issuer, x) == X509_V_OK) { |
| 110 | #if OPENSSL_VERSION_NUMBER < 0x10100000L |
| 111 | CRYPTO_add(&issuer->references, 1, CRYPTO_LOCK_X509); |
| 112 | #else |
| 113 | X509_up_ref(issuer); |
| 114 | #endif |
| 115 | return issuer; |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | inctx = X509_STORE_CTX_new(); |
| 120 | if (!X509_STORE_CTX_init(inctx, st, NULL, NULL)) { |
| 121 | X509_STORE_CTX_free(inctx); |
| 122 | return 0; |
| 123 | } |
| 124 | if (X509_STORE_CTX_get1_issuer(&issuer, inctx, x) <= 0) |
| 125 | issuer = NULL; |
| 126 | X509_STORE_CTX_cleanup(inctx); |
| 127 | X509_STORE_CTX_free(inctx); |
| 128 | return issuer; |
| 129 | } |
| 130 | |
| 131 | int ssl_stapling_init_cert(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, |
| 132 | modssl_ctx_t *mctx, X509 *x) |
no outgoing calls
no test coverage detected