Commit 02e5909f authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #19807 -- Sanitized getpass input in createsuperuser

Python 2 getpass on Windows doesn't accept unicode, even when
containing only ascii chars.
Thanks Semmel for the report and tests.
parent dcf8cd30
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -122,7 +122,7 @@ class Command(BaseCommand):
                while password is None:
                    if not password:
                        password = getpass.getpass()
                        password2 = getpass.getpass('Password (again): ')
                        password2 = getpass.getpass(force_str('Password (again): '))
                        if password != password2:
                            self.stderr.write("Error: Your passwords didn't match.")
                            password = None
+6 −3
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ from django.core.management import call_command
from django.test import TestCase
from django.test.utils import override_settings
from django.utils.encoding import force_str
from django.utils.six import StringIO
from django.utils.six import binary_type, StringIO


def mock_inputs(inputs):
@@ -24,8 +24,11 @@ def mock_inputs(inputs):
    def inner(test_func):
        def wrapped(*args):
            class mock_getpass:
                pass
            mock_getpass.getpass = staticmethod(lambda p=None: inputs['password'])
                @staticmethod
                def getpass(prompt=b'Password: ', stream=None):
                    # getpass on Windows only supports prompt as bytestring (#19807)
                    assert isinstance(prompt, binary_type)
                    return inputs['password']

            def mock_input(prompt):
                # prompt should be encoded in Python 2. This line will raise an