summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2009-09-10 16:50:57 +0000
committerLuke Plant <L.Plant.98@cantab.net>2009-09-10 16:50:57 +0000
commit84ef9dabfab371a1e0f14a846a509e045369280d (patch)
tree679fd14f557f6835fc21555742c7f4ab31bd9647
parenta2b46ca5fde802616ac0ee42798c0c94206e0c0d (diff)
Fixed #11061: Malformed POST request causes TypeError in AdminSite.login().
Thanks vvd git-svn-id: http://code.djangoproject.com/svn/django/trunk@11493 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/sites.py2
-rw-r--r--tests/regressiontests/admin_views/tests.py11
2 files changed, 12 insertions, 1 deletions
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index abcff14cd1..5f397ecb01 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -300,7 +300,7 @@ class AdminSite(object):
user = authenticate(username=username, password=password)
if user is None:
message = ERROR_MESSAGE
- if u'@' in username:
+ if username is not None and u'@' in username:
# Mistakenly entered e-mail address instead of username? Look it up.
try:
user = User.objects.get(email=username)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index aafa303cec..669755051e 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -353,6 +353,9 @@ class AdminViewPermissionsTest(TestCase):
LOGIN_FORM_KEY: 1,
'username': 'joepublic',
'password': 'secret'}
+ self.no_username_login = {
+ LOGIN_FORM_KEY: 1,
+ 'password': 'secret'}
def testLogin(self):
"""
@@ -416,6 +419,14 @@ class AdminViewPermissionsTest(TestCase):
# Login.context is a list of context dicts we just need to check the first one.
self.assert_(login.context[0].get('error_message'))
+ # Requests without username should not return 500 errors.
+ request = self.client.get('/test_admin/admin/')
+ self.failUnlessEqual(request.status_code, 200)
+ login = self.client.post('/test_admin/admin/', self.no_username_login)
+ self.failUnlessEqual(login.status_code, 200)
+ # Login.context is a list of context dicts we just need to check the first one.
+ self.assert_(login.context[0].get('error_message'))
+
def testLoginSuccessfullyRedirectsToOriginalUrl(self):
request = self.client.get('/test_admin/admin/')
self.failUnlessEqual(request.status_code, 200)