From ebe638165e5a5285ae595c9e0ae07b3dd919881b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 19 Mar 2011 16:49:06 +0100 Subject: Ignore all extra Host values sent in the request. --- src/cowboy_http_protocol.erl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cowboy_http_protocol.erl b/src/cowboy_http_protocol.erl index 0840b70..0ea2cd9 100644 --- a/src/cowboy_http_protocol.erl +++ b/src/cowboy_http_protocol.erl @@ -88,8 +88,8 @@ wait_header(Req, State=#state{socket=Socket, -spec header({http_header, I::integer(), Field::http_header(), R::term(), Value::string()} | http_eoh, Req::#http_req{}, State::#state{}) -> ok. -header({http_header, _I, 'Host', _R, Value}, Req=#http_req{path=Path}, - State=#state{dispatch=Dispatch}) -> +header({http_header, _I, 'Host', _R, Value}, Req=#http_req{path=Path, + host=undefined}, State=#state{dispatch=Dispatch}) -> Value2 = string:to_lower(Value), Host = cowboy_dispatcher:split_host(Value2), %% @todo We probably want to filter the Host and Path here to allow @@ -102,6 +102,9 @@ header({http_header, _I, 'Host', _R, Value}, Req=#http_req{path=Path}, {error, notfound} -> error_terminate(404, State) end; +%% Ignore Host headers if we already have it. +header({http_header, _I, 'Host', _R, _V}, Req, State) -> + wait_header(Req, State); header({http_header, _I, 'Connection', _R, Connection}, Req, State) -> ConnAtom = connection_to_atom(Connection), wait_header(Req#http_req{connection=ConnAtom, -- cgit v1.2.3