diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2009-09-10 16:50:57 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2009-09-10 16:50:57 +0000 |
| commit | 84ef9dabfab371a1e0f14a846a509e045369280d (patch) | |
| tree | 679fd14f557f6835fc21555742c7f4ab31bd9647 | |
| parent | a2b46ca5fde802616ac0ee42798c0c94206e0c0d (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.py | 2 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 11 |
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) |
