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.
This commit is contained in:
parent
dcf8cd30ae
commit
02e5909f7a
|
@ -122,7 +122,7 @@ class Command(BaseCommand):
|
||||||
while password is None:
|
while password is None:
|
||||||
if not password:
|
if not password:
|
||||||
password = getpass.getpass()
|
password = getpass.getpass()
|
||||||
password2 = getpass.getpass('Password (again): ')
|
password2 = getpass.getpass(force_str('Password (again): '))
|
||||||
if password != password2:
|
if password != password2:
|
||||||
self.stderr.write("Error: Your passwords didn't match.")
|
self.stderr.write("Error: Your passwords didn't match.")
|
||||||
password = None
|
password = None
|
||||||
|
|
|
@ -13,7 +13,7 @@ from django.core.management import call_command
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
from django.utils.encoding import force_str
|
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):
|
def mock_inputs(inputs):
|
||||||
|
@ -24,8 +24,11 @@ def mock_inputs(inputs):
|
||||||
def inner(test_func):
|
def inner(test_func):
|
||||||
def wrapped(*args):
|
def wrapped(*args):
|
||||||
class mock_getpass:
|
class mock_getpass:
|
||||||
pass
|
@staticmethod
|
||||||
mock_getpass.getpass = staticmethod(lambda p=None: inputs['password'])
|
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):
|
def mock_input(prompt):
|
||||||
# prompt should be encoded in Python 2. This line will raise an
|
# prompt should be encoded in Python 2. This line will raise an
|
||||||
|
|
Loading…
Reference in New Issue