From d9ad4bae1e0d6c43a009d393ac94f7ff50116171 Mon Sep 17 00:00:00 2001 From: Adam Kijak Date: Fri, 18 Aug 2017 13:23:10 +0200 Subject: [PATCH] Invalid parsing of Forwarded header fixed _parse_rfc7239_header() did not parse properly a Forwarded header with additional spaces Closes-Bug: #1711573 Change-Id: Ic8b7f9698d7b3440005b17d249b1c8f0f66dae8a (cherry picked from commit 480d60ac856937e1a48c1ed6df3b7d2e59a974dc) --- oslo_middleware/http_proxy_to_wsgi.py | 2 +- oslo_middleware/tests/test_http_proxy_to_wsgi.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/oslo_middleware/http_proxy_to_wsgi.py b/oslo_middleware/http_proxy_to_wsgi.py index 4d68bcf..701e5c8 100644 --- a/oslo_middleware/http_proxy_to_wsgi.py +++ b/oslo_middleware/http_proxy_to_wsgi.py @@ -49,7 +49,7 @@ class HTTPProxyToWSGI(base.ConfigurableMiddleware): entry = {} for d in proxy.split(";"): key, _, value = d.partition("=") - entry[key.lower()] = value + entry[key.lower().strip()] = value.strip() result.append(entry) return result diff --git a/oslo_middleware/tests/test_http_proxy_to_wsgi.py b/oslo_middleware/tests/test_http_proxy_to_wsgi.py index d114ad7..7fe9a2a 100644 --- a/oslo_middleware/tests/test_http_proxy_to_wsgi.py +++ b/oslo_middleware/tests/test_http_proxy_to_wsgi.py @@ -89,6 +89,18 @@ class TestHTTPProxyToWSGI(test_base.BaseTestCase): response = self.request.get_response(self.middleware) self.assertEqual(b"https://localhost:80/", response.body) + def test__parse_rfc7239_header(self): + expected_result = [{'for': 'foobar', 'proto': 'https'}, + {'for': 'foobaz', 'proto': 'http'}] + + result = self.middleware._parse_rfc7239_header( + "for=foobar;proto=https, for=foobaz;proto=http") + self.assertEqual(expected_result, result) + + result = self.middleware._parse_rfc7239_header( + "for=foobar; proto=https, for=foobaz; proto=http") + self.assertEqual(expected_result, result) + def test_rfc7239_proto_host(self): self.request.headers['Forwarded'] = ( "for=foobar;proto=https;host=example.com, for=foobaz;proto=http")