Kaydet (Commit) 859aa2a6 authored tarafından Claude Paroz's avatar Claude Paroz

Fixed #18790 -- Encoded database password on Python 2

Thanks thcourbon@gmail.com for the report.
üst 0133d667
...@@ -37,6 +37,7 @@ from django.db.backends.mysql.client import DatabaseClient ...@@ -37,6 +37,7 @@ from django.db.backends.mysql.client import DatabaseClient
from django.db.backends.mysql.creation import DatabaseCreation from django.db.backends.mysql.creation import DatabaseCreation
from django.db.backends.mysql.introspection import DatabaseIntrospection from django.db.backends.mysql.introspection import DatabaseIntrospection
from django.db.backends.mysql.validation import DatabaseValidation from django.db.backends.mysql.validation import DatabaseValidation
from django.utils.encoding import force_str
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.safestring import SafeBytes, SafeText from django.utils.safestring import SafeBytes, SafeText
from django.utils import six from django.utils import six
...@@ -390,7 +391,7 @@ class DatabaseWrapper(BaseDatabaseWrapper): ...@@ -390,7 +391,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
if settings_dict['NAME']: if settings_dict['NAME']:
kwargs['db'] = settings_dict['NAME'] kwargs['db'] = settings_dict['NAME']
if settings_dict['PASSWORD']: if settings_dict['PASSWORD']:
kwargs['passwd'] = settings_dict['PASSWORD'] kwargs['passwd'] = force_str(settings_dict['PASSWORD'])
if settings_dict['HOST'].startswith('/'): if settings_dict['HOST'].startswith('/'):
kwargs['unix_socket'] = settings_dict['HOST'] kwargs['unix_socket'] = settings_dict['HOST']
elif settings_dict['HOST']: elif settings_dict['HOST']:
......
...@@ -13,6 +13,7 @@ from django.db.backends.postgresql_psycopg2.client import DatabaseClient ...@@ -13,6 +13,7 @@ from django.db.backends.postgresql_psycopg2.client import DatabaseClient
from django.db.backends.postgresql_psycopg2.creation import DatabaseCreation from django.db.backends.postgresql_psycopg2.creation import DatabaseCreation
from django.db.backends.postgresql_psycopg2.version import get_version from django.db.backends.postgresql_psycopg2.version import get_version
from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection
from django.utils.encoding import force_str
from django.utils.log import getLogger from django.utils.log import getLogger
from django.utils.safestring import SafeText, SafeBytes from django.utils.safestring import SafeText, SafeBytes
from django.utils import six from django.utils import six
...@@ -172,7 +173,7 @@ class DatabaseWrapper(BaseDatabaseWrapper): ...@@ -172,7 +173,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
if settings_dict['USER']: if settings_dict['USER']:
conn_params['user'] = settings_dict['USER'] conn_params['user'] = settings_dict['USER']
if settings_dict['PASSWORD']: if settings_dict['PASSWORD']:
conn_params['password'] = settings_dict['PASSWORD'] conn_params['password'] = force_str(settings_dict['PASSWORD'])
if settings_dict['HOST']: if settings_dict['HOST']:
conn_params['host'] = settings_dict['HOST'] conn_params['host'] = settings_dict['HOST']
if settings_dict['PORT']: if settings_dict['PORT']:
......
...@@ -401,6 +401,19 @@ class BackendTestCase(TestCase): ...@@ -401,6 +401,19 @@ class BackendTestCase(TestCase):
self.assertEqual(list(cursor.fetchmany(2)), [('Jane', 'Doe'), ('John', 'Doe')]) self.assertEqual(list(cursor.fetchmany(2)), [('Jane', 'Doe'), ('John', 'Doe')])
self.assertEqual(list(cursor.fetchall()), [('Mary', 'Agnelline'), ('Peter', 'Parker')]) self.assertEqual(list(cursor.fetchall()), [('Mary', 'Agnelline'), ('Peter', 'Parker')])
def test_unicode_password(self):
old_password = connection.settings_dict['PASSWORD']
connection.settings_dict['PASSWORD'] = "françois"
try:
cursor = connection.cursor()
except backend.Database.DatabaseError:
# As password is probably wrong, a database exception is expected
pass
except Exception as e:
self.fail("Unexpected error raised with unicode password: %s" % e)
finally:
connection.settings_dict['PASSWORD'] = old_password
def test_database_operations_helper_class(self): def test_database_operations_helper_class(self):
# Ticket #13630 # Ticket #13630
self.assertTrue(hasattr(connection, 'ops')) self.assertTrue(hasattr(connection, 'ops'))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment