summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--STATUS11
-rw-r--r--server/vhost.c15
3 files changed, 15 insertions, 14 deletions
diff --git a/CHANGES b/CHANGES
index 7735c4be9d..5d03c6be4d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
Changes with Apache 2.4.5
+ *) core: apachectl -S prints wildcard name-based virtual hosts twice.
+ PR54948 [Eric Covener]
+
*) mod_proxy: Reject invalid values for Max-Forwards. [Graham Leggett,
Co-Advisor <coad measurement-factory.com>]
diff --git a/STATUS b/STATUS
index b030843444..6b637093f4 100644
--- a/STATUS
+++ b/STATUS
@@ -90,17 +90,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_proxy: Reject invalid values for Max-Forwards.
- trunk patch: http://svn.apache.org/r1481302
- http://svn.apache.org/r1481397
- 2.4.x patch: trunk patch works (minus CHANGES)
- +1: minfrin, sf, jim
-
- * core: PR54948 wildcard name-based virtual hosts printed twice in httpd -S
- trunk patch: http://svn.apache.org/r1481306.
- 2.4.x patch: trunk works
- +1 covener, minfrin, jim
-
* mod_cache: Fix uninitialized tmppath variable. PR 54949
trunk patch: Variable removed from trunk in http://svn.apache.org/r1407381
2.4.x patch: http://people.apache.org/~minfrin/httpd-mod_cache-tmppath.patch
diff --git a/server/vhost.c b/server/vhost.c
index fd7c0ad646..f8f41a033b 100644
--- a/server/vhost.c
+++ b/server/vhost.c
@@ -577,14 +577,21 @@ AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_s)
*/
for (s = main_s->next; s; s = s->next) {
+ server_addr_rec *sar_prev = NULL;
has_default_vhost_addr = 0;
for (sar = s->addrs; sar; sar = sar->next) {
ipaddr_chain *ic;
char inaddr_any[16] = {0}; /* big enough to handle IPv4 or IPv6 */
-
+ /* XXX: this treats 0.0.0.0 as a "default" server which matches no-exact-match for IPv6 */
if (!memcmp(sar->host_addr->ipaddr_ptr, inaddr_any, sar->host_addr->ipaddr_len)) {
ic = find_default_server(sar->host_port);
- if (!ic || sar->host_port != ic->sar->host_port) {
+
+ if (ic && sar->host_port == ic->sar->host_port) { /* we're a match for an existing "default server" */
+ if (!sar_prev || memcmp(sar_prev->host_addr->ipaddr_ptr, inaddr_any, sar_prev->host_addr->ipaddr_len)) {
+ add_name_vhost_config(p, main_s, s, sar, ic);
+ }
+ }
+ else {
/* No default server, or we found a default server but
** exactly one of us is a wildcard port, which means we want
** two ip-based vhosts not an NVH with two names
@@ -592,6 +599,7 @@ AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_s)
ic = new_ipaddr_chain(p, s, sar);
ic->next = default_list;
default_list = ic;
+ add_name_vhost_config(p, main_s, s, sar, ic);
}
has_default_vhost_addr = 1;
}
@@ -609,8 +617,9 @@ AP_DECLARE(void) ap_fini_vhost_config(apr_pool_t *p, server_rec *main_s)
ic->next = *iphash_table_tail[bucket];
*iphash_table_tail[bucket] = ic;
}
+ add_name_vhost_config(p, main_s, s, sar, ic);
}
- add_name_vhost_config(p, main_s, s, sar, ic);
+ sar_prev = sar;
}
/* Ok now we want to set up a server_hostname if the user was