From 3018e0c0df040524de17cba97314f32e9c63214f Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Tue, 13 Dec 2016 18:23:23 +0100
Subject: inets: httpc - Correct redirection host header

RFC2616 Sect 14.23: The Host request-header field specifies the
Internet host AND port number.
---
 lib/inets/src/http_client/httpc_response.erl |  2 +-
 lib/inets/test/httpc_SUITE.erl               | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/lib/inets/src/http_client/httpc_response.erl b/lib/inets/src/http_client/httpc_response.erl
index d8bdac24e3..0fd5faa466 100644
--- a/lib/inets/src/http_client/httpc_response.erl
+++ b/lib/inets/src/http_client/httpc_response.erl
@@ -363,7 +363,7 @@ redirect(Response = {StatusLine, Headers, Body}, Request) ->
 		%% Automatic redirection
 		{ok, {Scheme, _, Host, Port, Path,  Query}} -> 
 		    NewHeaders = 
-			(Request#request.headers)#http_request_h{host = Host},
+			(Request#request.headers)#http_request_h{host = Host++":"++integer_to_list(Port)},
 		    NewRequest = 
 			Request#request{redircount = 
 					Request#request.redircount+1,
diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl
index a64ae2b87c..b2d0ce7631 100644
--- a/lib/inets/test/httpc_SUITE.erl
+++ b/lib/inets/test/httpc_SUITE.erl
@@ -125,6 +125,7 @@ only_simulated() ->
      redirect_see_other,
      redirect_temporary_redirect,
      port_in_host_header,
+     redirect_port_in_host_header,
      relaxed
     ].
 
@@ -1102,6 +1103,12 @@ port_in_host_header(Config) when is_list(Config) ->
     Request = {url(group_name(Config), "/ensure_host_header_with_port.html", Config), []},
     {ok, {{_, 200, _}, _, Body}} = httpc:request(get, Request, [], []),
     inets_test_lib:check_body(Body).
+%%-------------------------------------------------------------------------
+redirect_port_in_host_header(Config) when is_list(Config) ->
+
+    Request = {url(group_name(Config), "/redirect_ensure_host_header_with_port.html", Config), []},
+    {ok, {{_, 200, _}, _, Body}} = httpc:request(get, Request, [], []),
+    inets_test_lib:check_body(Body).
 
 %%-------------------------------------------------------------------------
 timeout_memory_leak() ->
@@ -1680,6 +1687,12 @@ handle_uri(_,"/ensure_host_header_with_port.html",_,Headers,_,_) ->
 	    "HTTP/1.1 500 Internal Server Error\r\n" ++
 		"Content-Length:" ++ Len ++ "\r\n\r\n" ++ B
     end;
+handle_uri(_,"/redirect_ensure_host_header_with_port.html",Port,_,Socket,_) ->
+    NewUri = url_start(Socket) ++
+	integer_to_list(Port) ++ "/ensure_host_header_with_port.html",
+    "HTTP/1.1 302 Found \r\n" ++
+	"Location:" ++ NewUri ++  "\r\n" ++
+	"Content-Length:0\r\n\r\n";
 
 handle_uri(_,"/300.html",Port,_,Socket,_) ->
     NewUri = url_start(Socket) ++
-- 
cgit v1.2.3