| 572 | /* certificate related */ |
| 573 | |
| 574 | static apr_status_t pubcert_load(void *baton, apr_pool_t *p, apr_pool_t *ptemp, va_list ap) |
| 575 | { |
| 576 | md_reg_t *reg = baton; |
| 577 | apr_array_header_t *certs; |
| 578 | md_pubcert_t *pubcert, **ppubcert; |
| 579 | const md_t *md; |
| 580 | int index; |
| 581 | const md_cert_t *cert; |
| 582 | md_cert_state_t cert_state; |
| 583 | md_store_group_t group; |
| 584 | apr_status_t rv; |
| 585 | |
| 586 | ppubcert = va_arg(ap, md_pubcert_t **); |
| 587 | group = (md_store_group_t)va_arg(ap, int); |
| 588 | md = va_arg(ap, const md_t *); |
| 589 | index = va_arg(ap, int); |
| 590 | |
| 591 | if (md->cert_files && md->cert_files->nelts) { |
| 592 | rv = md_chain_fload(&certs, p, APR_ARRAY_IDX(md->cert_files, index, const char *)); |
| 593 | } |
| 594 | else { |
| 595 | md_pkey_spec_t *spec = md_pkeys_spec_get(md->pks, index);; |
| 596 | rv = md_pubcert_load(reg->store, group, md->name, spec, &certs, p); |
| 597 | } |
| 598 | if (APR_SUCCESS != rv) goto leave; |
| 599 | if (certs->nelts == 0) { |
| 600 | rv = APR_ENOENT; |
| 601 | goto leave; |
| 602 | } |
| 603 | |
| 604 | pubcert = apr_pcalloc(p, sizeof(*pubcert)); |
| 605 | pubcert->certs = certs; |
| 606 | cert = APR_ARRAY_IDX(certs, 0, const md_cert_t *); |
| 607 | if (APR_SUCCESS != (rv = md_cert_get_alt_names(&pubcert->alt_names, cert, p))) goto leave; |
| 608 | switch ((cert_state = md_cert_state_get(cert))) { |
| 609 | case MD_CERT_VALID: |
| 610 | case MD_CERT_EXPIRED: |
| 611 | break; |
| 612 | default: |
| 613 | md_log_perror(MD_LOG_MARK, MD_LOG_ERR, APR_EINVAL, ptemp, |
| 614 | "md %s has unexpected cert state: %d", md->name, cert_state); |
| 615 | rv = APR_ENOTIMPL; |
| 616 | break; |
| 617 | } |
| 618 | leave: |
| 619 | *ppubcert = (APR_SUCCESS == rv)? pubcert : NULL; |
| 620 | return rv; |
| 621 | } |
| 622 | |
| 623 | apr_status_t md_reg_get_pubcert(const md_pubcert_t **ppubcert, md_reg_t *reg, |
| 624 | const md_t *md, int i, apr_pool_t *p) |
nothing calls this directly
no test coverage detected