75 if (
uri.hostname &&
uri.hostname[0] &&
strcmp(
"localhost",
uri.hostname)) {
163 switch (
res->status) {
210 const char *
name, *domain, *
url;
249 "%s: reset staging area",
d->md->name);
272 if (!
ts_ctx->unix_socket_path) {
281 ts_ctx->unix_socket_path);
294 domain = (
d->md->domains->nelts > 0)?
308 if (
ts_ctx->chain->nelts <= 0) {
354 "A new tailscale certificate has been retrieved successfully and can "
355 "be used. A graceful server restart is recommended.");
APR general purpose library routines.
apr_size_t const unsigned char unsigned int unsigned int d
ap_vhost_iterate_conn_cb void * baton
#define APR_STATUS_IS_ENOENT(s)
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
apr_array_header_t ** result
#define apr_pcalloc(p, size)
#define APR_ARRAY_PUSH(ary, type)
#define APR_ARRAY_IDX(ary, i, type)
#define apr_time_from_sec(sec)
md_t * md_copy(apr_pool_t *p, const md_t *src)
apr_status_t md_cert_chain_read_http(struct apr_array_header_t *chain, apr_pool_t *p, const struct md_http_response_t *res)
int md_certs_are_equal(const md_cert_t *a, const md_cert_t *b)
apr_status_t md_pkey_read_http(md_pkey_t **ppkey, apr_pool_t *pool, const struct md_http_response_t *res)
apr_status_t md_check_cert_and_pkey(struct apr_array_header_t *certs, md_pkey_t *pkey)
apr_status_t md_http_GET_perform(struct md_http_t *http, const char *url, struct apr_table_t *headers, md_http_response_cb *cb, void *baton)
void md_http_set_unix_socket_path(md_http_t *http, const char *path)
apr_status_t md_http_create(md_http_t **phttp, apr_pool_t *p, const char *user_agent, const char *proxy_url)
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,...)
apr_status_t md_reg_get_pubcert(const md_pubcert_t **ppubcert, md_reg_t *reg, const md_t *md, int i, apr_pool_t *p)
void md_result_activity_printf(md_result_t *result, const char *fmt,...)
void md_result_activity_setn(md_result_t *result, const char *activity)
void md_result_printf(md_result_t *result, apr_status_t status, const char *fmt,...)
void md_result_log(md_result_t *result, unsigned int level)
void md_result_set(md_result_t *result, apr_status_t status, const char *detail)
void md_result_delay_set(md_result_t *result, apr_time_t ready_at)
apr_status_t md_creds_save(md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *name, md_credentials_t *creds, int create)
apr_status_t md_creds_load(md_store_t *store, md_store_group_t group, const char *name, md_pkey_spec_t *spec, md_credentials_t **pcreds, apr_pool_t *p)
apr_status_t md_pubcert_save(md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *name, md_pkey_spec_t *spec, struct apr_array_header_t *pubcert, int create)
int md_is_newer(md_store_t *store, md_store_group_t group1, md_store_group_t group2, const char *name, apr_pool_t *p)
apr_status_t md_save(md_store_t *store, apr_pool_t *p, md_store_group_t group, md_t *md, int create)
apr_status_t md_store_purge(md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *name)
apr_status_t md_pkey_save(md_store_t *store, apr_pool_t *p, md_store_group_t group, const char *name, md_pkey_spec_t *spec, struct md_pkey_t *pkey, int create)
apr_status_t md_load(md_store_t *store, md_store_group_t group, const char *name, md_t **pmd, apr_pool_t *p)
static apr_status_t rv_of_response(const md_http_response_t *res)
static md_proto_t TAILSCALE_PROTO
static apr_status_t ts_complete_md(md_t *md, apr_pool_t *p)
static apr_status_t on_get_cert(const md_http_response_t *res, void *baton)
static apr_status_t ts_preload(md_proto_driver_t *d, md_store_group_t load_group, md_result_t *result)
apr_status_t md_tailscale_protos_add(apr_hash_t *protos, apr_pool_t *p)
static apr_status_t ts_renew(md_proto_driver_t *d, md_result_t *result)
static apr_status_t ts_init(md_proto_driver_t *d, md_result_t *result)
static apr_status_t ts_preload_init(md_proto_driver_t *d, md_result_t *result)
static apr_status_t on_get_key(const md_http_response_t *res, void *baton)
#define MD_PROTO_TAILSCALE
int md_array_str_eq(const struct apr_array_header_t *a1, const struct apr_array_header_t *a2, int case_sensitive)
apr_status_t md_util_is_unix_socket(const char *path, apr_pool_t *pool)
#define MD_TAILSCALE_DEF_URL
struct apr_array_header_t * chain
const char * unix_socket_path
struct apr_array_header_t * ca_urls
const char * unix_socket_path
apr_array_header_t * chain
md_proto_driver_t * driver