1
0
mirror of https://github.com/apache/httpd.git synced 2026-01-06 09:01:14 +03:00

* Correctly obey ServerName / ServerAlias if the Host header from the

request matches the VirtualHost address.

PR: 51709
Submitted by: Micha Lenk <micha lenk.info>
Reviewed by: rpluem


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1172002 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ruediger Pluem
2011-09-17 15:08:14 +00:00
parent 026b641a70
commit cfe0a63cd5
2 changed files with 29 additions and 12 deletions

View File

@@ -12,6 +12,10 @@ Changes with Apache 2.3.15
PR 51714. [Stefan Fritsch, Jim Jagielski, Ruediger Pluem, Eric Covener,
<lowprio20 gmail.com>]
*) core: Correctly obey ServerName / ServerAlias if the Host header from the
request matches the VirtualHost address.
PR 51709. [Micha Lenk <micha lenk.info>]
*) mod_unique_id: Use random number generator to initialize counter.
PR 45110. [Stefan Fritsch]

View File

@@ -860,9 +860,11 @@ static void check_hostalias(request_rec *r)
const char *host = r->hostname;
apr_port_t port;
server_rec *s;
server_rec *virthost_s;
server_rec *last_s;
name_chain *src;
virthost_s = NULL;
last_s = NULL;
port = r->connection->local_addr->port;
@@ -889,23 +891,34 @@ static void check_hostalias(request_rec *r)
s = src->server;
/* does it match the virthost from the sar? */
if (!strcasecmp(host, sar->virthost)) {
goto found;
}
if (s == last_s) {
/* we've already done ServerName and ServerAlias checks for this
* vhost
*/
continue;
/* If we still need to do ServerName and ServerAlias checks for this
* server, do them now.
*/
if (s != last_s) {
/* does it match any ServerName or ServerAlias directive? */
if (matches_aliases(s, host)) {
goto found;
}
}
last_s = s;
if (matches_aliases(s, host)) {
goto found;
/* Fallback: does it match the virthost from the sar? */
if (!strcasecmp(host, sar->virthost)) {
/* only the first match is used */
if (virthost_s == NULL) {
virthost_s = s;
}
}
}
/* If ServerName and ServerAlias check failed, we end up here. If it
* matches a VirtualHost, virthost_s is set. Use that as fallback
*/
if (virthost_s) {
s = virthost_s;
goto found;
}
return;
found: