56#define APACHE_PREFIX "/.httpd/"
57#define MD_STATUS_RESOURCE APACHE_PREFIX"certificate-status"
58#define HTML_STATUS(X) (!((X)->flags & AP_STATUS_SHORT))
75 "requesting status for: %s",
r->
hostname);
85 "md(%s): status supports only GET", md->
name);
90 "requesting status for MD: %s", md->
name);
95 "loading md status for %s", md->
name);
174 const char *
s =
"unknown";
239 "<span title='%s' style='white-space: nowrap;'>%s</span>",
283 "style='white-space: nowrap;'>%s</span>",
353 const char*
url,
const char *proto,
int i)
357 if (proto && !
strcmp(proto,
"tailscale")) {
389 const char *proto, *
url;
408 for (
i = 0;
i <
urls->nelts; ++
i) {
427 const char *separator)
434 const char *
s, *line;
444 line = separator? separator :
"";
461 finished ?
"yes" :
"no");
468 line =
apr_psprintf(bb->
p,
"%s finished, %d new certificate%s staged.",
472 line =
apr_psprintf(bb->
p,
"%s finished successfully.", line);
495 errors, (errors > 1)?
"y" :
"ies");
512 else if (line[0] !=
'\0') {
571 "<a href=\"%s%s\">%s[%s]</a><br>",
573 ctx->mc->cert_check_name,
key);
583 ctx->mc->cert_check_name);
589 "%sFingerprint: %s\n",
600 if (
ctx->mc->cert_check_name &&
ctx->mc->cert_check_url) {
763 ctx.prefix =
"ManagedCertificates";
772 if (
mc->mds->nelts > 0) {
787 if (
mc->mds->nelts > 0) {
793 "<hr>\n<h3>Managed Certificates</h3>\n<table class='md_status'><thead><tr>\n");
800 ctx.prefix =
"ManagedDomain";
884 ctx.prefix =
"ManagedStaplings";
888 int total = 0, good = 0, revoked = 0, unknown = 0;
909 "<hr>\n<h3>Managed Staplings</h3>\n<table class='md_ocsp_status'><thead><tr>\n");
916 ctx.prefix =
"ManagedStapling";
const char apr_size_t len
APR-UTIL registration of functions exported by modules.
#define ap_get_module_config(v, m)
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
ap_vhost_iterate_conn_cb void * baton
apr_brigade_flush void * ctx
apr_pool_t apr_dbd_t const char const char * label
const char apr_ssize_t int flags
#define HTTP_INTERNAL_SERVER_ERROR
#define HTTP_NOT_IMPLEMENTED
char * ap_escape_html2(apr_pool_t *p, const char *s, int toasc)
#define APR_ARRAY_IDX(ary, i, type)
#define APR_RFC822_DATE_LEN
apr_int64_t apr_interval_time_t
#define apr_time_sec(time)
#define apr_time_from_sec(sec)
int md_cert_count(const md_t *md)
#define MD_KEY_STATE_DESCR
#define MD_KEY_RENEW_MODE
@ MD_S_EXPIRED_DEPRECATED
@ MD_S_MISSING_INFORMATION
md_t * md_get_by_name(struct apr_array_header_t *mds, const char *name)
md_t * md_get_by_domain(struct apr_array_header_t *mds, const char *domain)
#define MD_KEY_SHA256_FINGERPRINT
const char * md_get_ca_name_from_url(apr_pool_t *p, const char *url)
md_pkey_spec_t * md_pkeys_spec_get(const md_pkeys_spec_t *pks, int index)
const char * md_pkey_spec_name(const md_pkey_spec_t *spec)
md_json_t * md_json_create(apr_pool_t *pool)
apr_status_t md_json_getsa(apr_array_header_t *a, const md_json_t *json,...)
int md_json_getb(const md_json_t *json,...)
apr_status_t md_json_sets(const char *value, md_json_t *json,...)
const char * md_json_gets(const md_json_t *json,...)
long md_json_getl(const md_json_t *json,...)
md_json_t * md_json_getj(md_json_t *json,...)
int md_json_iterkey(md_json_iterkey_cb *cb, void *baton, md_json_t *json,...)
int md_json_is(const md_json_type_t jtype, md_json_t *json,...)
apr_status_t md_json_setj(const md_json_t *value, md_json_t *json,...)
int md_json_has_key(const md_json_t *json,...)
int md_json_itera(md_json_itera_cb *cb, void *baton, md_json_t *json,...)
apr_time_t md_json_get_time(const md_json_t *json,...)
apr_status_t md_json_writeb(const md_json_t *json, md_json_fmt_t fmt, apr_bucket_brigade *bb)
const char * md_json_writep(const md_json_t *json, apr_pool_t *p, md_json_fmt_t fmt)
void md_ocsp_get_status_all(md_json_t **pjson, md_ocsp_reg_t *reg, apr_pool_t *p)
apr_size_t md_ocsp_count(md_ocsp_reg_t *reg)
void md_ocsp_get_summary(md_json_t **pjson, md_ocsp_reg_t *reg, apr_pool_t *p)
apr_status_t md_status_get_json(md_json_t **pjson, apr_array_header_t *mds, md_reg_t *reg, md_ocsp_reg_t *ocsp, apr_pool_t *p)
apr_status_t md_status_get_md_json(md_json_t **pjson, const md_t *md, md_reg_t *reg, md_ocsp_reg_t *ocsp, apr_pool_t *p)
void md_status_take_stock(md_json_t **pjson, apr_array_header_t *mds, md_reg_t *reg, apr_pool_t *p)
const char * md_duration_roughly(apr_pool_t *p, apr_interval_time_t duration)
static void add_status_cell(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void si_val_names(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void val_url_print(status_ctx *ctx, const status_info *info, const char *url, const char *proto, int i)
static void print_date(status_ctx *ctx, apr_time_t timestamp, const char *title)
int md_status_handler(request_rec *r)
static void si_val_remote_check(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static int add_ocsp_row(void *baton, apr_size_t index, md_json_t *mdj)
#define MD_STATUS_RESOURCE
static const status_info status_infos[]
static void add_json_val(status_ctx *ctx, md_json_t *j)
static int cert_check_iter(void *baton, const char *key, md_json_t *json)
static void si_val_ca_urls(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void si_val_ocsp_activity(status_ctx *ctx, md_json_t *mdj, const status_info *info)
int md_http_cert_status(request_rec *r)
static void print_time(status_ctx *ctx, const char *label, apr_time_t t)
static int json_iter_val(void *data, size_t index, md_json_t *json)
int md_domains_status_hook(request_rec *r, int flags)
static void si_add_header(status_ctx *ctx, const status_info *info)
static void si_val_valid_time(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void si_val_activity(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void si_val_cert_valid_time(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static int add_md_row(void *baton, apr_size_t index, md_json_t *mdj)
static void si_val_url(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static int md_name_cmp(const void *v1, const void *v2)
void add_status_fn(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void si_val_stapling(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static void print_job_summary(status_ctx *ctx, md_json_t *mdj, const char *key, const char *separator)
static void si_val_status(status_ctx *ctx, md_json_t *mdj, const status_info *info)
static int count_certs(void *baton, const char *key, md_json_t *json)
static const status_info ocsp_status_infos[]
int md_ocsp_status_hook(request_rec *r, int flags)
Status Report Extension Module to Apache.
struct apr_bucket_alloc_t * bucket_alloc
int certificate_status_enabled
struct md_ocsp_reg_t * ocsp
struct md_pkeys_spec_t * pks
A structure that represents the current request.
struct ap_filter_t * output_filters
apr_table_t * headers_out
struct ap_conf_vector_t * module_config
apr_status_t apr_strftime(char *s, apr_size_t *retsize, apr_size_t max, const char *format, apr_time_exp_t *xt)
apr_status_t apr_rfc822_date(char *date_str, apr_time_t t)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray