summaryrefslogtreecommitdiff
path: root/tests/auth_tests/test_forms.py
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2018-01-23 13:20:18 -0500
committerTim Graham <timograham@gmail.com>2018-02-01 09:13:59 -0500
commitc37bb28677295f6edda61d8ac461014ef0d3aeb2 (patch)
treeda7fcf5f410874508d950309b6236b147bbd0da4 /tests/auth_tests/test_forms.py
parent1bd45e24584286075f4ff6cbeff2437c77e2c762 (diff)
[2.0.x] Fixed CVE-2018-6188 -- Fixed information leakage in AuthenticationForm.
Reverted 359370a8b8ca0efe99b1d4630b291ec060b69225 (refs #28645). This is a security fix.
Diffstat (limited to 'tests/auth_tests/test_forms.py')
-rw-r--r--tests/auth_tests/test_forms.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py
index 7d8b5f7486..7690b62514 100644
--- a/tests/auth_tests/test_forms.py
+++ b/tests/auth_tests/test_forms.py
@@ -262,6 +262,9 @@ class UserCreationFormTest(TestDataMixin, TestCase):
)
+# To verify that the login form rejects inactive users, use an authentication
+# backend that allows them.
+@override_settings(AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.AllowAllUsersModelBackend'])
class AuthenticationFormTest(TestDataMixin, TestCase):
def test_invalid_username(self):
@@ -291,6 +294,24 @@ class AuthenticationFormTest(TestDataMixin, TestCase):
self.assertFalse(form.is_valid())
self.assertEqual(form.non_field_errors(), [str(form.error_messages['inactive'])])
+ # Use an authentication backend that rejects inactive users.
+ @override_settings(AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.ModelBackend'])
+ def test_inactive_user_incorrect_password(self):
+ """An invalid login doesn't leak the inactive status of a user."""
+ data = {
+ 'username': 'inactive',
+ 'password': 'incorrect',
+ }
+ form = AuthenticationForm(None, data)
+ self.assertFalse(form.is_valid())
+ self.assertEqual(
+ form.non_field_errors(), [
+ form.error_messages['invalid_login'] % {
+ 'username': User._meta.get_field('username').verbose_name
+ }
+ ]
+ )
+
def test_login_failed(self):
signal_calls = []