Changeset fd6bb19 in mod_gnutls for src/gnutls_ocsp.c


Ignore:
Timestamp:
Jun 3, 2016, 10:08:29 AM (4 years ago)
Author:
Thomas Klute <thomas2.klute@…>
Branches:
debian/master, debian/stretch-backports, master, upstream
Children:
c3ad933
Parents:
4ae7810
Message:

Extract OCSP access URI from the server certificate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_ocsp.c

    r4ae7810 rfd6bb19  
    223223                  ctxt->sc->ocsp_response_file);
    224224
     225    /* TODO: response should come from cache, which must be filled
     226     * from sc->ocsp_uri */
    225227    int ret = gnutls_load_file(ctxt->sc->ocsp_response_file, ocsp_response);
    226228    if (ret != GNUTLS_E_SUCCESS)
     
    277279
    278280
     281apr_uri_t * mgs_cert_get_ocsp_uri(apr_pool_t *p, gnutls_x509_crt_t cert)
     282{
     283    apr_pool_t *tmp;
     284    apr_status_t rv = apr_pool_create(&tmp, p);
     285    if (rv != APR_SUCCESS)
     286        return NULL;
     287
     288    apr_uri_t *ocsp_uri = NULL;
     289
     290    int ret = GNUTLS_E_SUCCESS;
     291    /* search authority info access for OCSP URI */
     292    for (int seq = 0; ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; seq++)
     293    {
     294        gnutls_datum_t ocsp_access_data;
     295        ret = gnutls_x509_crt_get_authority_info_access(cert, seq,
     296                                                        GNUTLS_IA_OCSP_URI,
     297                                                        &ocsp_access_data,
     298                                                        NULL);
     299        if (ret == GNUTLS_E_SUCCESS)
     300        {
     301            /* create NULL terminated string */
     302            char *ocsp_str =
     303                apr_pstrndup(tmp, (const char*) ocsp_access_data.data,
     304                             ocsp_access_data.size);
     305            gnutls_free(ocsp_access_data.data);
     306
     307            ocsp_uri = apr_palloc(p, sizeof(apr_uri_t));
     308            rv = apr_uri_parse(p, ocsp_str, ocsp_uri);
     309            if (rv == APR_SUCCESS)
     310                break;
     311            else
     312                ocsp_uri = NULL;
     313        }
     314    }
     315
     316    apr_pool_destroy(tmp);
     317    return ocsp_uri;
     318}
     319
     320
     321
    279322/*
    280323 * Like in the general post_config hook the HTTP status codes for
     
    282325 * to denote an error.
    283326 */
    284 int mgs_ocsp_post_config_server(apr_pool_t *pconf, server_rec *server)
    285 {
    286     mgs_srvconf_rec *sc =
    287         (mgs_srvconf_rec *) ap_get_module_config(server->module_config,
    288                                                  &gnutls_module);
     327int mgs_ocsp_post_config_server(apr_pool_t *pconf,
     328                                apr_pool_t *ptemp __attribute__((unused)),
     329                                server_rec *server)
     330{
     331    mgs_srvconf_rec *sc = (mgs_srvconf_rec *)
     332        ap_get_module_config(server->module_config, &gnutls_module);
    289333
    290334    if (sc->certs_x509_chain_num < 2)
     
    297341        return HTTP_NOT_FOUND;
    298342    }
     343
     344    sc->ocsp_uri = mgs_cert_get_ocsp_uri(pconf, sc->certs_x509_crt_chain[0]);
     345
    299346    sc->ocsp_trust = apr_palloc(pconf,
    300347                                sizeof(gnutls_x509_trust_list_t));
Note: See TracChangeset for help on using the changeset viewer.