diff options
| author | Vlastimil Zíma <vlastimil.zima@gmail.com> | 2015-09-03 20:52:49 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-09-04 09:24:21 -0400 |
| commit | cf29b6b5610f242d18dcc31eb897c873109b67e2 (patch) | |
| tree | bd60ca9d686cd22a002e7a2e2f3d4ab288c1d9eb /django | |
| parent | 4c0447b2ae57f4e8c44bcb2f371d160cb8daa930 (diff) | |
Fixed #25099 -- Fixed crash in AdminEmailHandler on DisallowedHost.
Diffstat (limited to 'django')
| -rw-r--r-- | django/http/request.py | 23 | ||||
| -rw-r--r-- | django/views/debug.py | 6 |
2 files changed, 24 insertions, 5 deletions
diff --git a/django/http/request.py b/django/http/request.py index b50392abd2..15f1c4614e 100644 --- a/django/http/request.py +++ b/django/http/request.py @@ -68,8 +68,11 @@ class HttpRequest(object): '<%s: %s %r>' % (self.__class__.__name__, self.method, force_str(self.get_full_path())) ) - def get_host(self): - """Returns the HTTP host using the environment or request headers.""" + def _get_raw_host(self): + """ + Return the HTTP host using the environment or request headers. Skip + allowed hosts protection, so may return an insecure host. + """ # We try three options, in order of decreasing preference. if settings.USE_X_FORWARDED_HOST and ( 'HTTP_X_FORWARDED_HOST' in self.META): @@ -82,6 +85,11 @@ class HttpRequest(object): server_port = self.get_port() if server_port != ('443' if self.is_secure() else '80'): host = '%s:%s' % (host, server_port) + return host + + def get_host(self): + """Return the HTTP host using the environment or request headers.""" + host = self._get_raw_host() # There is no hostname validation when DEBUG=True if settings.DEBUG: @@ -138,6 +146,17 @@ class HttpRequest(object): raise return value + def get_raw_uri(self): + """ + Return an absolute URI from variables available in this request. Skip + allowed hosts protection, so may return insecure URI. + """ + return '{scheme}://{host}{path}'.format( + scheme=self.scheme, + host=self._get_raw_host(), + path=self.get_full_path(), + ) + def build_absolute_uri(self, location=None): """ Builds an absolute URI from the location and the variables available in diff --git a/django/views/debug.py b/django/views/debug.py index 4f96ac320c..55357b3344 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -669,7 +669,7 @@ TECHNICAL_500_TEMPLATE = (""" </tr> <tr> <th>Request URL:</th> - <td>{{ request.build_absolute_uri|escape }}</td> + <td>{{ request.get_raw_uri|escape }}</td> </tr> {% endif %} <tr> @@ -849,7 +849,7 @@ Environment: {% if request %} Request Method: {{ request.META.REQUEST_METHOD }} -Request URL: {{ request.build_absolute_uri|escape }} +Request URL: {{ request.get_raw_uri|escape }} {% endif %} Django Version: {{ django_version_info }} Python Version: {{ sys_version_info }} @@ -1048,7 +1048,7 @@ TECHNICAL_500_TEXT_TEMPLATE = ("""{% firstof exception_type 'Report' %}{% if req {% firstof exception_value 'No exception message supplied' %} {% if request %} Request Method: {{ request.META.REQUEST_METHOD }} -Request URL: {{ request.build_absolute_uri }}{% endif %} +Request URL: {{ request.get_raw_uri }}{% endif %} Django Version: {{ django_version_info }} Python Executable: {{ sys_executable }} Python Version: {{ sys_version_info }} |
