MCPcopy Create free account
hub / github.com/apache/httpd / md_ocsp_prime

Function md_ocsp_prime

modules/md/md_ocsp.c:320–386  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

318}
319
320apr_status_t md_ocsp_prime(md_ocsp_reg_t *reg, const char *ext_id, apr_size_t ext_id_len,
321 md_cert_t *cert, md_cert_t *issuer, const md_t *md)
322{
323 md_ocsp_status_t *ostat;
324 const char *name;
325 md_data_t id;
326 apr_status_t rv = APR_SUCCESS;
327
328 /* Called during post_config. no mutex protection needed */
329 name = md? md->name : MD_OTHER;
330 md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, reg->p,
331 "md[%s]: priming OCSP status", name);
332
333 rv = md_ocsp_init_id(&id, reg->p, cert);
334 if (APR_SUCCESS != rv) goto cleanup;
335
336 ostat = apr_hash_get(reg->ostat_by_id, id.data, (apr_ssize_t)id.len);
337 if (ostat) goto cleanup; /* already seen it, cert is used in >1 server_rec */
338
339 ostat = apr_pcalloc(reg->p, sizeof(*ostat));
340 ostat->id = id;
341 ostat->reg = reg;
342 ostat->md_name = name;
343 md_data_to_hex(&ostat->hexid, 0, reg->p, &ostat->id);
344 ostat->file_name = apr_psprintf(reg->p, "ocsp-%s.json", ostat->hexid);
345 rv = md_cert_to_sha256_fingerprint(&ostat->hex_sha256, cert, reg->p);
346 if (APR_SUCCESS != rv) goto cleanup;
347
348 md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, reg->p,
349 "md[%s]: getting ocsp responder from cert", name);
350 rv = md_cert_get_ocsp_responder_url(&ostat->responder_url, reg->p, cert);
351 if (APR_SUCCESS != rv) {
352 md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, reg->p,
353 "md[%s]: certificate with serial %s has no OCSP responder URL",
354 name, md_cert_get_serial_number(cert, reg->p));
355 goto cleanup;
356 }
357
358 ostat->certid = OCSP_cert_to_id(NULL, md_cert_get_X509(cert), md_cert_get_X509(issuer));
359 if (!ostat->certid) {
360 rv = APR_EGENERAL;
361 md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, reg->p,
362 "md[%s]: unable to create OCSP certid for certificate with serial %s",
363 name, md_cert_get_serial_number(cert, reg->p));
364 goto cleanup;
365 }
366
367 /* See, if we have something in store */
368 ocsp_status_refresh(ostat, reg->p);
369 md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, reg->p,
370 "md[%s]: adding ocsp info (responder=%s)",
371 name, ostat->responder_url);
372 apr_hash_set(reg->ostat_by_id, ostat->id.data, (apr_ssize_t)ostat->id.len, ostat);
373 if (ext_id) {
374 md_ocsp_id_map_t *id_map;
375
376 id_map = apr_pcalloc(reg->p, sizeof(*id_map));
377 id_map->id = id;

Callers 1

md_ocsp_prime_statusFunction · 0.85

Calls 9

md_log_perrorFunction · 0.85
md_ocsp_init_idFunction · 0.85
md_data_to_hexFunction · 0.85
md_cert_get_X509Function · 0.85
ocsp_status_refreshFunction · 0.85
md_data_assign_pcopyFunction · 0.85

Tested by

no test coverage detected