diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | lib/webrick/httpserver.rb | 11 |
2 files changed, 17 insertions, 2 deletions
@@ -1,3 +1,11 @@ +Sun Mar 21 22:17:35 2004 GOTOU Yuuzou <gotoyuzo@notwork.org> + + * lib/webrick/httpserver.rb (WEBrick::HTTPServer#virtual_host): + sort @virtual_hosts in address, port, host order. + + * lib/webrick/httpserver.rb (WEBrick::HTTPServer#lookup_server): + hostname should not be match if :ServerAlias is not given. + Sun Mar 21 21:11:16 2004 Keiju Ishitsuka <keiju@ishitsuka.com> * lib/shell/*: bug fix for Shell#system(command_line_string). diff --git a/lib/webrick/httpserver.rb b/lib/webrick/httpserver.rb index 849706eb46..13574e7de0 100644 --- a/lib/webrick/httpserver.rb +++ b/lib/webrick/httpserver.rb @@ -132,14 +132,21 @@ module WEBrick def virtual_host(server) @virtual_hosts << server + @virtual_hosts = @virtual_hosts.sort_by{|s| + num = 0 + num -= 4 if s[:BindAddress] + num -= 2 if s[:Port] + num -= 1 if s[:ServerName] + num + } end def lookup_server(req) @virtual_hosts.find{|s| - (s[:Port].nil? || req.port == s[:Port]) && (s[:BindAddress].nil? || req.addr[3] == s[:BindAddress]) && + (s[:Port].nil? || req.port == s[:Port]) && ((s[:ServerName].nil? || req.host == s[:ServerName]) || - (s[:ServerAlias].nil? || s[:ServerAlias].find{|h| h === req.host})) + (!s[:ServerAlias].nil? && s[:ServerAlias].find{|h| h === req.host})) } end |