79 else if (!
strcmp(
"deactivated",
s)) {
82 else if (!
strcmp(
"revoked",
s)) {
128 const char *ca_url, *
url;
182 const char *
id = pid? *pid :
NULL;
287 "found account %s for %s: %s, status=%d",
288 acct->
id,
ctx->md->ca_effective, aspect, acct->
status);
364 acme, md, acme->
p))) {
372 "no account found, looking in STAGING");
452 if (
ctx->eab_kid &&
ctx->eab_hmac) {
482 "acct update failed for %s", acme->
acct->
url);
487 "trying acct update via ToS agreement");
535 "external account binding HMAC value is not valid base64",
NULL);
542 "external account binding MAC could not be computed",
NULL);
558 if (
ctx->agreement) {
561 if (
ctx->eab_kid &&
ctx->eab_hmac) {
600 "invalid agreement uri (%s): %s",
err,
ctx.agreement);
611 "invalid contact uri (%s): %s",
err,
uri);
626 memset(&fctx, 0,
sizeof(fctx));
637 "reusing key from account %s", fctx.
id);
659 "registered new account %s", acme->
acct->
url);
708 if (
ctx->acme->acct->agreement) {
730 const char *agreement,
const char **
prequired)
APR general purpose library routines.
ap_vhost_iterate_conn_cb void * baton
#define APR_STATUS_IS_ENOENT(s)
apr_brigade_flush void * ctx
void const char apr_status_t(* cleanup)(void *))
const char apr_uint32_t * id
#define apr_pcalloc(p, size)
#define APR_ARRAY_IDX(ary, i, type)
apr_int32_t apr_int32_t apr_int32_t err
#define MD_KEY_REGISTRATION
apr_status_t md_acme_req_body_init(md_acme_req_t *req, md_json_t *payload)
apr_status_t md_acme_POST_new_account(md_acme_t *acme, md_acme_req_init_cb *on_init, md_acme_req_json_cb *on_json, md_acme_req_res_cb *on_res, md_acme_req_err_cb *on_err, void *baton)
apr_status_t md_acme_POST(md_acme_t *acme, const char *url, md_acme_req_init_cb *on_init, md_acme_req_json_cb *on_json, md_acme_req_res_cb *on_res, md_acme_req_err_cb *on_err, void *baton)
static apr_status_t get_eab(md_json_t **peab, md_acme_req_t *req, const char *kid, const char *hmac64, md_pkey_t *account_key, const char *url)
apr_status_t md_acme_acct_save(md_store_t *store, apr_pool_t *p, md_acme_t *acme, const char **pid, md_acme_acct_t *acct, md_pkey_t *acct_key)
static apr_status_t on_init_agree_tos(md_acme_req_t *req, void *baton)
static const char * mk_acct_pattern(apr_pool_t *p, md_acme_t *acme)
static md_acme_acct_st acct_st_from_str(const char *s)
int md_acme_acct_matches_md(md_acme_acct_t *acct, const md_t *md)
apr_status_t md_acme_acct_load(md_acme_acct_t **pacct, md_pkey_t **ppkey, md_store_t *store, md_store_group_t group, const char *name, apr_pool_t *p)
static apr_status_t on_init_acct_del(md_acme_req_t *req, void *baton)
int md_acme_acct_matches_url(md_acme_acct_t *acct, const char *url)
apr_status_t md_acme_acct_from_json(md_acme_acct_t **pacct, md_json_t *json, apr_pool_t *p)
apr_status_t md_acme_acct_validate(md_acme_t *acme, md_store_t *store, apr_pool_t *p)
apr_status_t md_acme_acct_deactivate(md_acme_t *acme, apr_pool_t *p)
static apr_status_t acct_make(md_acme_acct_t **pacct, apr_pool_t *p, const char *ca_url, apr_array_header_t *contacts)
apr_status_t md_acme_acct_id_for_md(const char **pid, md_store_t *store, md_store_group_t group, const md_t *md, apr_pool_t *p)
static apr_status_t acct_find(const char **pid, md_acme_acct_t **pacct, md_pkey_t **ppkey, md_store_t *store, md_store_group_t group, const char *name_pattern, const md_t *md, apr_pool_t *p)
md_json_t * md_acme_acct_to_json(md_acme_acct_t *acct, apr_pool_t *p)
apr_status_t md_acme_agree(md_acme_t *acme, apr_pool_t *p, const char *agreement)
static apr_status_t acct_upd(md_acme_t *acme, apr_pool_t *p, const apr_table_t *hdrs, md_json_t *body, void *baton)
static const char * mk_acct_id(apr_pool_t *p, md_acme_t *acme, int i)
apr_status_t md_acme_check_agreement(md_acme_t *acme, apr_pool_t *p, const char *agreement, const char **prequired)
apr_status_t md_acme_find_acct_for_md(md_acme_t *acme, md_store_t *store, const md_t *md)
apr_status_t md_acme_acct_register(md_acme_t *acme, md_store_t *store, const md_t *md, apr_pool_t *p)
apr_status_t md_acme_acct_update(md_acme_t *acme)
static apr_status_t acct_find_and_verify(md_store_t *store, md_store_group_t group, const char *name_pattern, md_acme_t *acme, const md_t *md, apr_pool_t *p)
static int find_acct(void *baton, const char *name, const char *aspect, md_store_vtype_t vtype, void *value, apr_pool_t *ptemp)
static apr_status_t on_init_acct_new(md_acme_req_t *req, void *baton)
static apr_status_t on_init_acct_upd(md_acme_req_t *req, void *baton)
#define MD_ACME_ACCT_PKEY_BITS
@ MD_ACME_ACCT_ST_DEACTIVATED
@ MD_ACME_ACCT_ST_REVOKED
@ MD_ACME_ACCT_ST_UNKNOWN
apr_status_t md_pkey_gen(md_pkey_t **ppkey, apr_pool_t *p, 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,...)
apr_status_t md_json_sets(const char *value, md_json_t *json,...)
const char * md_json_gets(const md_json_t *json,...)
md_json_t * md_json_clone(apr_pool_t *pool, const md_json_t *json)
apr_status_t md_json_dupsa(apr_array_header_t *a, apr_pool_t *p, 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,...)
apr_status_t md_json_setb(int value, md_json_t *json,...)
const char * md_json_dups(apr_pool_t *p, const md_json_t *json,...)
apr_status_t md_json_setsa(apr_array_header_t *a, md_json_t *json,...)
const char * md_json_writep(const md_json_t *json, apr_pool_t *p, md_json_fmt_t fmt)
apr_status_t md_jws_hmac(md_json_t **pmsg, apr_pool_t *p, md_data_t *payload, md_json_t *prot_fields, const md_data_t *hmac_key)
apr_status_t md_jws_get_jwk(md_json_t **pjwk, apr_pool_t *p, struct md_pkey_t *pkey)
void md_log_perror(const char *file, int line, md_log_level_t level, apr_status_t rv, apr_pool_t *p, const char *fmt,...)
int md_log_is_level(apr_pool_t *p, md_log_level_t level)
void md_result_problem_set(md_result_t *result, apr_status_t status, const char *problem, const char *detail, const md_json_t *subproblems)
apr_status_t md_store_save(md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *name, const char *aspect, md_store_vtype_t vtype, void *data, int create)
apr_status_t md_store_iter(md_store_inspect *inspect, void *baton, md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *pattern, const char *aspect, md_store_vtype_t vtype)
apr_status_t md_store_load_json(md_store_t *store, md_store_group_t group, const char *name, const char *aspect, struct md_json_t **pdata, apr_pool_t *p)
apr_status_t md_store_load(md_store_t *store, md_store_group_t group, const char *name, const char *aspect, md_store_vtype_t vtype, void **pdata, apr_pool_t *p)
apr_size_t md_util_base64url_decode(md_data_t *decoded, const char *encoded, apr_pool_t *pool)
apr_status_t md_util_abs_uri_check(apr_pool_t *p, const char *uri, const char **perr)
void md_data_null(md_data_t *d)
apr_array_header_t * contacts
struct md_json_t * registration
struct md_result_t * result
const char * ca_agreement
struct md_acme_acct_t * acct
struct md_pkey_t * acct_key
union md_pkey_spec_t::@24 params
const char * ca_effective
const char * ca_agreement
struct apr_array_header_t * contacts