check_hobos: constrain database_name to 63 characters (#22797)
This commit is contained in:
parent
5b582638d5
commit
3c30efe14a
|
@ -439,3 +439,12 @@ def test_configure_postgresql():
|
|||
with mock.patch('psycopg2.connect') as connect:
|
||||
sql.get_connection(new=True)
|
||||
assert connect.call_args_list[0][1] == {'user': 'fred', 'database': 'tests_wcs_wcs_example_net'}
|
||||
|
||||
pub.cfg['postgresql']['database-template-name'] = 'very_long_'*10 + '%s'
|
||||
with mock.patch('psycopg2.connect') as connect:
|
||||
with mock.patch('subprocess.call') as call:
|
||||
hobo_cmd.configure_sql(service, pub)
|
||||
assert connect.call_args_list[0][1] == {'user': 'test', 'database': 'postgres'}
|
||||
assert connect.call_args_list[1][1] == {'user': 'fred',
|
||||
'database': 'very_long_very_long_very_long_c426_ng_very_long_wcs_example_net'}
|
||||
assert len(connect.call_args_list[1][1]['database']) == 63
|
||||
|
|
|
@ -33,6 +33,8 @@ from qommon.storage import atomic_write
|
|||
from wcs.admin.settings import UserFieldsFormDef
|
||||
from wcs.fields import StringField, EmailField, DateField
|
||||
|
||||
from django.utils.encoding import force_bytes
|
||||
|
||||
|
||||
class NoChange(Exception):
|
||||
pass
|
||||
|
@ -436,6 +438,12 @@ class CmdCheckHobos(Command):
|
|||
with open(site_options_filepath, 'wb') as site_options:
|
||||
config.write(site_options)
|
||||
|
||||
def normalize_database_name(self, database_name):
|
||||
if len(database_name) > 63:
|
||||
digest = hashlib.md5(force_bytes(database_name)).hexdigest()[:4]
|
||||
database_name = '%s_%s_%s' % (database_name[:29], digest, database_name[-28:])
|
||||
return database_name
|
||||
|
||||
def configure_sql(self, service, pub):
|
||||
if not pub.cfg.get('postgresql'):
|
||||
return
|
||||
|
@ -460,6 +468,8 @@ class CmdCheckHobos(Command):
|
|||
if not domain_table_name in database_name:
|
||||
database_name = '%s_%s' % (database_name.split('_')[0], domain_table_name)
|
||||
|
||||
database_name = self.normalize_database_name(database_name)
|
||||
|
||||
createdb_cfg = pub.cfg['postgresql'].get('createdb-connection-params')
|
||||
if not createdb_cfg:
|
||||
createdb_cfg = {}
|
||||
|
|
Loading…
Reference in New Issue