| [1602] | 1 | commit 3b081163d6250d893838d69d9a83f217c341d657 | 
|---|
 | 2 | Author: Greg Brockman <gdb@mit.edu> | 
|---|
 | 3 | Date:   Fri Aug 6 23:19:15 2010 -0400 | 
|---|
 | 4 |  | 
|---|
 | 5 |     Add method to merge virtual host with a main server_rec | 
|---|
 | 6 |  | 
|---|
 | 7 | diff --git a/include/http_config.h b/include/http_config.h | 
|---|
 | 8 | index 5e9fd51..8e6f247 100644 | 
|---|
 | 9 | --- a/include/http_config.h | 
|---|
 | 10 | +++ b/include/http_config.h | 
|---|
 | 11 | @@ -827,6 +827,16 @@ AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p); | 
|---|
 | 12 |  AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p,  | 
|---|
 | 13 |                                          server_rec *main_server); | 
|---|
 | 14 |   | 
|---|
 | 15 | +/** | 
|---|
 | 16 | + * Setup a single virtual host by merging the main server_rec into it. | 
|---|
 | 17 | + * @param p The pool to allocate from | 
|---|
 | 18 | + * @param main_server The server_rec with which to merge | 
|---|
 | 19 | + * @param virt The virtual host server_rec with some set of directives to override already set | 
|---|
 | 20 | + */ | 
|---|
 | 21 | +AP_DECLARE(void) ap_fixup_virtual_host(apr_pool_t *p, | 
|---|
 | 22 | +                                      server_rec *main_server, | 
|---|
 | 23 | +                                      server_rec *virt); | 
|---|
 | 24 | + | 
|---|
 | 25 |  /* For http_request.c... */ | 
|---|
 | 26 |   | 
|---|
 | 27 |  /** | 
|---|
 | 28 | diff --git a/server/config.c b/server/config.c | 
|---|
 | 29 | index 101d0e4..ef0f2ba 100644 | 
|---|
 | 30 | --- a/server/config.c | 
|---|
 | 31 | +++ b/server/config.c | 
|---|
 | 32 | @@ -1902,38 +1902,43 @@ AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p, | 
|---|
 | 33 |  } | 
|---|
 | 34 |   | 
|---|
 | 35 |   | 
|---|
 | 36 | -AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server) | 
|---|
 | 37 | +AP_DECLARE(void) ap_fixup_virtual_host(apr_pool_t *p, server_rec *main_server, | 
|---|
 | 38 | +                                       server_rec *virt) | 
|---|
 | 39 |  { | 
|---|
 | 40 | -    server_rec *virt; | 
|---|
 | 41 | +    merge_server_configs(p, main_server->module_config, | 
|---|
 | 42 | +                         virt->module_config); | 
|---|
 | 43 |   | 
|---|
 | 44 | -    for (virt = main_server->next; virt; virt = virt->next) { | 
|---|
 | 45 | -        merge_server_configs(p, main_server->module_config, | 
|---|
 | 46 | -                             virt->module_config); | 
|---|
 | 47 | +    virt->lookup_defaults = | 
|---|
 | 48 | +        ap_merge_per_dir_configs(p, main_server->lookup_defaults, | 
|---|
 | 49 | +                                 virt->lookup_defaults); | 
|---|
 | 50 |   | 
|---|
 | 51 | -        virt->lookup_defaults = | 
|---|
 | 52 | -            ap_merge_per_dir_configs(p, main_server->lookup_defaults, | 
|---|
 | 53 | -                                     virt->lookup_defaults); | 
|---|
 | 54 | +    if (virt->server_admin == NULL) | 
|---|
 | 55 | +        virt->server_admin = main_server->server_admin; | 
|---|
 | 56 |   | 
|---|
 | 57 | -        if (virt->server_admin == NULL) | 
|---|
 | 58 | -            virt->server_admin = main_server->server_admin; | 
|---|
 | 59 | +    if (virt->timeout == 0) | 
|---|
 | 60 | +        virt->timeout = main_server->timeout; | 
|---|
 | 61 |   | 
|---|
 | 62 | -        if (virt->timeout == 0) | 
|---|
 | 63 | -            virt->timeout = main_server->timeout; | 
|---|
 | 64 | +    if (virt->keep_alive_timeout == 0) | 
|---|
 | 65 | +        virt->keep_alive_timeout = main_server->keep_alive_timeout; | 
|---|
 | 66 |   | 
|---|
 | 67 | -        if (virt->keep_alive_timeout == 0) | 
|---|
 | 68 | -            virt->keep_alive_timeout = main_server->keep_alive_timeout; | 
|---|
 | 69 | +    if (virt->keep_alive == -1) | 
|---|
 | 70 | +        virt->keep_alive = main_server->keep_alive; | 
|---|
 | 71 |   | 
|---|
 | 72 | -        if (virt->keep_alive == -1) | 
|---|
 | 73 | -            virt->keep_alive = main_server->keep_alive; | 
|---|
 | 74 | +    if (virt->keep_alive_max == -1) | 
|---|
 | 75 | +        virt->keep_alive_max = main_server->keep_alive_max; | 
|---|
 | 76 |   | 
|---|
 | 77 | -        if (virt->keep_alive_max == -1) | 
|---|
 | 78 | -            virt->keep_alive_max = main_server->keep_alive_max; | 
|---|
 | 79 | +    /* XXX: this is really something that should be dealt with by a | 
|---|
 | 80 | +     * post-config api phase | 
|---|
 | 81 | +     */ | 
|---|
 | 82 | +    ap_core_reorder_directories(p, virt); | 
|---|
 | 83 | +} | 
|---|
 | 84 |   | 
|---|
 | 85 | -        /* XXX: this is really something that should be dealt with by a | 
|---|
 | 86 | -         * post-config api phase | 
|---|
 | 87 | -         */ | 
|---|
 | 88 | -        ap_core_reorder_directories(p, virt); | 
|---|
 | 89 | -    } | 
|---|
 | 90 | +AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server) | 
|---|
 | 91 | +{ | 
|---|
 | 92 | +    server_rec *virt; | 
|---|
 | 93 | + | 
|---|
 | 94 | +    for (virt = main_server->next; virt; virt = virt->next) | 
|---|
 | 95 | +        ap_fixup_virtual_host(p, main_server, virt); | 
|---|
 | 96 |   | 
|---|
 | 97 |      ap_core_reorder_directories(p, main_server); | 
|---|
 | 98 |  } | 
|---|