Commit 71218d47 authored by Stefan Eissing's avatar Stefan Eissing
Browse files

On the trunk:

mod_md: v0.9.9, fix for applying challenge type based on available ports. 



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1811082 13f79535-47bb-0310-9956-ffa450edef68
parent a6c9e126
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.5.0

  *) mod_md: v0.9.9, fix for applying challenge type based on available ports. [Stefan Eissing]

  *) mod_proxy_uwsgi: New UWSGI mod_proxy (sub)module contributed by unbit.com.

  *) mod_http2: v0.10.12, removed optimization for mutex handling in bucket beams that 
+15 −0
Original line number Diff line number Diff line
@@ -632,6 +632,21 @@ static apr_status_t acme_driver_init(md_proto_driver_t *d)
        return APR_EGENERAL;
    }
    
    if (!d->can_http) {
        ad->ca_challenges = md_array_str_remove(d->p, ad->ca_challenges, MD_AUTHZ_TYPE_HTTP01, 0);
    }
    if (!d->can_https) {
        ad->ca_challenges = md_array_str_remove(d->p, ad->ca_challenges, MD_AUTHZ_TYPE_TLSSNI01, 0);
    }

    if (apr_is_empty_array(ad->ca_challenges)) {
        md_log_perror(MD_LOG_MARK, MD_LOG_ERR, 0, d->p, "%s: specific CA challenge methods "
                      "have been configured, but the server is unable to use any of those. "
                      "For 'http-01' it needs to be reachable on port 80, for 'tls-sni-01'"
                      " port 443 is needed.", d->md->name);
        return APR_EGENERAL;
    }
    
    md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, 0, d->p, "%s: init driver", d->md->name);
    
    return rv;
+4 −2
Original line number Diff line number Diff line
@@ -28,7 +28,8 @@
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunreachable-code"
#elif defined(__clang__)
#endif
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-function"
#endif
@@ -40,7 +41,8 @@

#if defined(__GNUC__)
#pragma GCC diagnostic pop
#elif defined(__clang__)
#endif
#if defined(__clang__)
#pragma clang diagnostic pop
#endif

+49 −50
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@
struct md_reg_t {
    struct md_store_t *store;
    struct apr_hash_t *protos;
    int was_synched;
    int can_http;
    int can_https;
    const char *proxy_url;
@@ -46,6 +45,27 @@ struct md_reg_t {
/**************************************************************************************************/
/* life cycle */

static apr_status_t load_props(md_reg_t *reg, apr_pool_t *p)
{
    md_json_t *json;
    apr_status_t rv;
    
    rv = md_store_load(reg->store, MD_SG_NONE, NULL, MD_FN_HTTPD_JSON, 
                       MD_SV_JSON, (void**)&json, p);
    if (APR_SUCCESS == rv) {
        if (md_json_has_key(json, MD_KEY_PROTO, MD_KEY_HTTP, NULL)) {
            reg->can_http = md_json_getb(json, MD_KEY_PROTO, MD_KEY_HTTP, NULL);
        }
        if (md_json_has_key(json, MD_KEY_PROTO, MD_KEY_HTTPS, NULL)) {
            reg->can_https = md_json_getb(json, MD_KEY_PROTO, MD_KEY_HTTPS, NULL);
        }
    }
    else if (APR_STATUS_IS_ENOENT(rv)) {
        rv = APR_SUCCESS;
    }
    return rv;
}

apr_status_t md_reg_init(md_reg_t **preg, apr_pool_t *p, struct md_store_t *store,
                         const char *proxy_url)
{
@@ -58,7 +78,10 @@ apr_status_t md_reg_init(md_reg_t **preg, apr_pool_t *p, struct md_store_t *stor
    reg->can_http = 1;
    reg->can_https = 1;
    reg->proxy_url = proxy_url? apr_pstrdup(p, proxy_url) : NULL;
    rv = md_acme_protos_add(reg->protos, p);
    
    if (APR_SUCCESS == (rv = md_acme_protos_add(reg->protos, p))) {
        rv = load_props(reg, p);
    }
    
    *preg = (rv == APR_SUCCESS)? reg : NULL;
    return rv;
@@ -618,35 +641,22 @@ static int find_changes(void *baton, md_store_t *store, md_t *md, apr_pool_t *pt
    return 1;
}

static apr_status_t load_props(md_reg_t *reg, apr_pool_t *p)
apr_status_t md_reg_set_props(md_reg_t *reg, apr_pool_t *p, int can_http, int can_https)
{
    if (reg->can_http != can_http || reg->can_https != can_https) {
        md_json_t *json;
    apr_status_t rv;
        
    rv = md_store_load(reg->store, MD_SG_NONE, NULL, MD_FN_HTTPD_JSON, 
                       MD_SV_JSON, (void**)&json, p);
    if (APR_SUCCESS == rv) {
        if (md_json_has_key(json, MD_KEY_PROTO, MD_KEY_HTTP, NULL)) {
            reg->can_http = md_json_getb(json, MD_KEY_PROTO, MD_KEY_HTTP, NULL);
        }
        if (md_json_has_key(json, MD_KEY_PROTO, MD_KEY_HTTPS, NULL)) {
            reg->can_https = md_json_getb(json, MD_KEY_PROTO, MD_KEY_HTTPS, NULL);
        }
    }
    else if (APR_STATUS_IS_ENOENT(rv)) {
        rv = APR_SUCCESS;
    }
    return rv;
}
        reg->can_http = can_http;
        reg->can_https = can_https;
        
static apr_status_t sync_props(md_reg_t *reg, apr_pool_t *p, int can_http, int can_https)
{
    md_json_t *json = md_json_create(p);
        json = md_json_create(p);
        md_json_setb(can_http, json, MD_KEY_PROTO, MD_KEY_HTTP, NULL);
        md_json_setb(can_https, json, MD_KEY_PROTO, MD_KEY_HTTPS, NULL);
        
        return md_store_save(reg->store, p, MD_SG_NONE, NULL, MD_FN_HTTPD_JSON, MD_SV_JSON, json, 0);
    }
    return APR_SUCCESS;
}
 
/**
 * Procedure:
@@ -665,19 +675,12 @@ static apr_status_t sync_props(md_reg_t *reg, apr_pool_t *p, int can_http, int c
 *   c. compare MD acme url/protocol, update if changed
 */
apr_status_t md_reg_sync(md_reg_t *reg, apr_pool_t *p, apr_pool_t *ptemp, 
                         apr_array_header_t *master_mds, int can_http, int can_https) 
                         apr_array_header_t *master_mds) 
{
    sync_ctx ctx;
    md_store_t *store = reg->store;
    apr_status_t rv;

    if (APR_SUCCESS != (rv = sync_props(reg, ptemp, can_http, can_https))) {
        reg->was_synched = 0;
        return rv;
    }
    
    reg->was_synched = 1;
    
    ctx.p = ptemp;
    ctx.conf_mds = master_mds;
    ctx.store_mds = apr_array_make(ptemp, 100, sizeof(md_t *));
@@ -843,9 +846,6 @@ static apr_status_t init_proto_driver(md_proto_driver_t *driver, const md_proto_
    /* If this registry instance was not synched before (and obtained server
     * properties that way), read them from the store.
     */
    if (reg->was_synched 
        || APR_SUCCESS == (rv = load_props(reg, p))) {

    driver->proto = proto;
    driver->p = p;
    driver->challenge = challenge;
@@ -856,7 +856,6 @@ static apr_status_t init_proto_driver(md_proto_driver_t *driver, const md_proto_
    driver->proxy_url = reg->proxy_url;
    driver->md = md;
    driver->reset = reset;
    }

    return rv;
}
+3 −1
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ apr_status_t md_reg_init(md_reg_t **preg, apr_pool_t *pm, struct md_store_t *sto

struct md_store_t *md_reg_store_get(md_reg_t *reg);

apr_status_t md_reg_set_props(md_reg_t *reg, apr_pool_t *p, int can_http, int can_https);

/**
 * Add a new md to the registry. This will check the name for uniqueness and
 * that domain names do not overlap with already existing mds.
@@ -119,7 +121,7 @@ apr_status_t md_reg_get_cred_files(md_reg_t *reg, const md_t *md, apr_pool_t *p,
 * Synchronise the give master mds with the store.
 */
apr_status_t md_reg_sync(md_reg_t *reg, apr_pool_t *p, apr_pool_t *ptemp, 
                         apr_array_header_t *master_mds, int can_http, int can_https);
                         apr_array_header_t *master_mds);

/**************************************************************************************************/
/* protocol drivers */
Loading