From 7a3ba81a2aa9a71d2d1f770a4a7ba423edb30652 Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 30 Aug 2018 01:16:41 +0200 Subject: [PATCH 01/11] [fix] Migrate bad password --- .../data_migrations/0006_migrate_pwd.py | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 src/yunohost/data_migrations/0006_migrate_pwd.py diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_migrate_pwd.py new file mode 100644 index 0000000000..c64940d4ae --- /dev/null +++ b/src/yunohost/data_migrations/0006_migrate_pwd.py @@ -0,0 +1,133 @@ +import spwd +import crypt +import random +import string +import subprocess + +from moulinette import m18n +from moulinette.core import MoulinetteError +from moulinette.utils.log import getActionLogger +from moulinette.utils.process import run_commands +from moulinette.utils.filesystem import append_to_file +from moulinette.authenticators.ldap import Authenticator + +from yunohost.tools import Migration + +logger = getActionLogger('yunohost.migration') +SMALL_PWD_LIST = ["yunohost", "olinuxino", "olinux", "raspberry", "admin", + "root", "test", "rpi"] + +class MyMigration(Migration): + "Migrate password" + + def migrate(self): + + if self._is_root_pwd_listed(SMALL_PWD_LIST): + new_hash = self._get_admin_hash() + self._replace_root_hash(new_hash) + + def backward(self): + + pass + + def _get_admin_hash(self): + """ + Ask for admin hash the ldap db + Note: to do that like we don't know the admin password we add a second + password + """ + logger.debug('Generate a random temporary password') + tmp_password = ''.join(random.choice(string.ascii_letters + + string.digits) for i in range(12)) + + # Generate a random temporary password (won't be valid after this + # script ends !) and hash it + logger.debug('Hash temporary password') + tmp_hash = subprocess.check_output(["slappasswd", "-h", "{SSHA}","-s", + tmp_password]) + + try: + logger.debug('Stop slapd and backup its conf') + run_commands([ + # Stop slapd service... + 'systemctl stop slapd', + + # Backup slapd.conf (to be restored at the end of script) + 'cp /etc/ldap/slapd.conf /root/slapd.conf.bkp' + ]) + + logger.debug('Add password to the conf') + # Append lines to slapd.conf to manually define root password hash + append_to_file("/etc/ldap/slapd.conf", 'rootdn "cn=admin,dc=yunohost,dc=org"') + append_to_file("/etc/ldap/slapd.conf", "\n") + append_to_file("/etc/ldap/slapd.conf", 'rootpw ' + tmp_hash) + + logger.debug('Start slapd with new password') + run_commands([ + # Test conf (might not be entirely necessary though :P) + 'slaptest -Q -u -f /etc/ldap/slapd.conf', + + # Regenerate slapd.d directory + 'rm -Rf /etc/ldap/slapd.d', + 'mkdir /etc/ldap/slapd.d', + 'slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1', + + # Set permissions to slapd.d + 'chown -R openldap:openldap /etc/ldap/slapd.d/', + + # Restore slapd.conf + 'mv /root/slapd.conf.bkp /etc/ldap/slapd.conf', + + # Restart slapd service + 'service slapd start' + ]) + + logger.debug('Authenticate on ldap') + auth = Authenticator('default', 'ldap://localhost:389', + 'dc=yunohost,dc=org', 'cn=admin') + auth.authenticate( tmp_password) + logger.debug('Ask for the admin hash') + admin_hash = auth.search('cn=admin,dc=yunohost,dc=org', 'cn=admin', + ['userPassword'])[0]['userPassword'][0] + admin_hash = admin_hash.replace('{CRYPT}', '') + finally: + logger.debug('Remove tmp_password from ldap db') + # Remove tmp_password from ldap db + run_commands([ + + # Stop slapd service + 'service slapd stop || true', + + 'if [ -f /root/slapd.conf.bkp ]; then mv /root/slapd.conf.bkp /etc/ldap/slapd.conf; fi', + + # Regenerate slapd.d directory + 'rm -Rf /etc/ldap/slapd.d', + 'mkdir /etc/ldap/slapd.d', + 'slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1', + + # Set permissions to slapd.d + 'chown -R openldap:openldap /etc/ldap/slapd.d/', + + # Restart slapd service + 'service slapd start' + ]) + return admin_hash + + + def _replace_root_hash(self, new_hash): + hash_root = spwd.getspnam("root").sp_pwd + + with open('/etc/shadow', 'r') as before_file: + before = before_file.read() + + with open('/etc/shadow', 'w') as after_file: + after_file.write(before.replace("root:" + hash_root, + "root:" + new_hash)) + + def _is_root_pwd_listed(self, pwd_list): + hash_root = spwd.getspnam("root").sp_pwd + + for password in pwd_list: + if hash_root == crypt.crypt(password, hash_root): + return True + return False From 6aef80cd2502aee71bcbf555d3c4b5669ffe0b5e Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 30 Aug 2018 01:18:26 +0200 Subject: [PATCH 02/11] [fix] Restrict to very common password --- src/yunohost/data_migrations/0006_migrate_pwd.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_migrate_pwd.py index c64940d4ae..93783d6626 100644 --- a/src/yunohost/data_migrations/0006_migrate_pwd.py +++ b/src/yunohost/data_migrations/0006_migrate_pwd.py @@ -14,8 +14,7 @@ from yunohost.tools import Migration logger = getActionLogger('yunohost.migration') -SMALL_PWD_LIST = ["yunohost", "olinuxino", "olinux", "raspberry", "admin", - "root", "test", "rpi"] +SMALL_PWD_LIST = ["yunohost", "olinux"] class MyMigration(Migration): "Migrate password" From 2d5077e2eadc5ec18273fe73d6b96ac94219a7fb Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 30 Aug 2018 01:34:12 +0200 Subject: [PATCH 03/11] [enh] Synchronize root and admin password --- data/actionsmap/yunohost.yml | 2 +- locales/en.json | 1 + src/yunohost/tools.py | 19 ++++++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/data/actionsmap/yunohost.yml b/data/actionsmap/yunohost.yml index 8509bfb232..2229217476 100644 --- a/data/actionsmap/yunohost.yml +++ b/data/actionsmap/yunohost.yml @@ -1438,7 +1438,7 @@ tools: ### tools_adminpw() adminpw: - action_help: Change admin password + action_help: Change password of admin and root users api: PUT /adminpw configuration: authenticate: all diff --git a/locales/en.json b/locales/en.json index 0745123114..ab5569cfc9 100644 --- a/locales/en.json +++ b/locales/en.json @@ -364,6 +364,7 @@ "restore_running_app_script": "Running restore script of app '{app:s}'...", "restore_running_hooks": "Running restoration hooks...", "restore_system_part_failed": "Unable to restore the '{part:s}' system part", + "root_password_desynchronized": "Password of the user admin has been changed, but Root password has not been synchronized with your new admin password !", "server_shutdown": "The server will shutdown", "server_shutdown_confirm": "The server will shutdown immediatly, are you sure? [{answers:s}]", "server_reboot": "The server will reboot", diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py index f9ee14994d..7221e6804f 100644 --- a/src/yunohost/tools.py +++ b/src/yunohost/tools.py @@ -127,15 +127,28 @@ def tools_adminpw(auth, new_password): """ from yunohost.user import _hash_user_password + import spwd + new_hash = _hash_user_password(new_password) try: - auth.update("cn=admin", { - "userPassword": _hash_user_password(new_password), - }) + auth.update("cn=admin", { "userPassword": new_hash, }) except: logger.exception('unable to change admin password') raise MoulinetteError(errno.EPERM, m18n.n('admin_password_change_failed')) else: + # Write as root password + try: + hash_root = spwd.getspnam("root").sp_pwd + + with open('/etc/shadow', 'r') as before_file: + before = before_file.read() + + with open('/etc/shadow', 'w') as after_file: + after_file.write(before.replace("root:" + hash_root, + "root:" + new_hash)) + except IOError as e: + logger.warning(m18n.n('root_password_desynchronized')) + return logger.success(m18n.n('admin_password_changed')) From e150c41da23d21ba72c95786db2b06d7b4dec5d7 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Wed, 24 Oct 2018 18:27:09 +0000 Subject: [PATCH 04/11] Simplify method to fetch admin password hash --- .../data_migrations/0006_migrate_pwd.py | 90 ++----------------- 1 file changed, 9 insertions(+), 81 deletions(-) diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_migrate_pwd.py index 93783d6626..4aad37b2ed 100644 --- a/src/yunohost/data_migrations/0006_migrate_pwd.py +++ b/src/yunohost/data_migrations/0006_migrate_pwd.py @@ -7,10 +7,9 @@ from moulinette import m18n from moulinette.core import MoulinetteError from moulinette.utils.log import getActionLogger -from moulinette.utils.process import run_commands +from moulinette.utils.process import run_commands, check_output from moulinette.utils.filesystem import append_to_file from moulinette.authenticators.ldap import Authenticator - from yunohost.tools import Migration logger = getActionLogger('yunohost.migration') @@ -31,88 +30,17 @@ def backward(self): def _get_admin_hash(self): """ - Ask for admin hash the ldap db - Note: to do that like we don't know the admin password we add a second - password + Fetch the admin hash from the LDAP db using slapcat """ - logger.debug('Generate a random temporary password') - tmp_password = ''.join(random.choice(string.ascii_letters + - string.digits) for i in range(12)) - - # Generate a random temporary password (won't be valid after this - # script ends !) and hash it - logger.debug('Hash temporary password') - tmp_hash = subprocess.check_output(["slappasswd", "-h", "{SSHA}","-s", - tmp_password]) - - try: - logger.debug('Stop slapd and backup its conf') - run_commands([ - # Stop slapd service... - 'systemctl stop slapd', - - # Backup slapd.conf (to be restored at the end of script) - 'cp /etc/ldap/slapd.conf /root/slapd.conf.bkp' - ]) - - logger.debug('Add password to the conf') - # Append lines to slapd.conf to manually define root password hash - append_to_file("/etc/ldap/slapd.conf", 'rootdn "cn=admin,dc=yunohost,dc=org"') - append_to_file("/etc/ldap/slapd.conf", "\n") - append_to_file("/etc/ldap/slapd.conf", 'rootpw ' + tmp_hash) - - logger.debug('Start slapd with new password') - run_commands([ - # Test conf (might not be entirely necessary though :P) - 'slaptest -Q -u -f /etc/ldap/slapd.conf', - - # Regenerate slapd.d directory - 'rm -Rf /etc/ldap/slapd.d', - 'mkdir /etc/ldap/slapd.d', - 'slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1', - - # Set permissions to slapd.d - 'chown -R openldap:openldap /etc/ldap/slapd.d/', - - # Restore slapd.conf - 'mv /root/slapd.conf.bkp /etc/ldap/slapd.conf', - - # Restart slapd service - 'service slapd start' - ]) - - logger.debug('Authenticate on ldap') - auth = Authenticator('default', 'ldap://localhost:389', - 'dc=yunohost,dc=org', 'cn=admin') - auth.authenticate( tmp_password) - logger.debug('Ask for the admin hash') - admin_hash = auth.search('cn=admin,dc=yunohost,dc=org', 'cn=admin', - ['userPassword'])[0]['userPassword'][0] - admin_hash = admin_hash.replace('{CRYPT}', '') - finally: - logger.debug('Remove tmp_password from ldap db') - # Remove tmp_password from ldap db - run_commands([ - - # Stop slapd service - 'service slapd stop || true', - - 'if [ -f /root/slapd.conf.bkp ]; then mv /root/slapd.conf.bkp /etc/ldap/slapd.conf; fi', - - # Regenerate slapd.d directory - 'rm -Rf /etc/ldap/slapd.d', - 'mkdir /etc/ldap/slapd.d', - 'slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1', - - # Set permissions to slapd.d - 'chown -R openldap:openldap /etc/ldap/slapd.d/', - - # Restart slapd service - 'service slapd start' - ]) + admin_hash = check_output("slapcat \ + | grep 'dn: cn=admin,dc=yunohost,dc=org' -A20 \ + | grep userPassword -A2 \ + | tr -d '\n ' \ + | tr ':' ' ' \ + | awk '{print $2}' \ + | base64 -d") return admin_hash - def _replace_root_hash(self, new_hash): hash_root = spwd.getspnam("root").sp_pwd From 7975d73cadbc60c320333fba78aca1e5e31dd23b Mon Sep 17 00:00:00 2001 From: ljf Date: Thu, 25 Oct 2018 14:56:12 +0200 Subject: [PATCH 05/11] [enh] Manual migration if not weak password --- locales/en.json | 1 + .../data_migrations/0006_migrate_pwd.py | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/locales/en.json b/locales/en.json index ab5569cfc9..cb9d535609 100644 --- a/locales/en.json +++ b/locales/en.json @@ -287,6 +287,7 @@ "migration_0005_postgresql_94_not_installed": "Postgresql was not installed on your system. Nothing to do!", "migration_0005_postgresql_96_not_installed": "Postgresql 9.4 has been found to be installed, but not postgresql 9.6 !? Something weird might have happened on your system :( ...", "migration_0005_not_enough_space": "Not enough space is available in {path} to run the migration right now :(.", + "migration_0006_root_admin_sync_warning": "Yunohost now expect admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by your root password.", "migrations_backward": "Migrating backward.", "migrations_bad_value_for_target": "Invalid number for target argument, available migrations numbers are 0 or {}", "migrations_cant_reach_migration_file": "Can't access migrations files at path %s", diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_migrate_pwd.py index 93783d6626..dec795ae3f 100644 --- a/src/yunohost/data_migrations/0006_migrate_pwd.py +++ b/src/yunohost/data_migrations/0006_migrate_pwd.py @@ -21,14 +21,26 @@ class MyMigration(Migration): def migrate(self): - if self._is_root_pwd_listed(SMALL_PWD_LIST): - new_hash = self._get_admin_hash() - self._replace_root_hash(new_hash) + new_hash = self._get_admin_hash() + self._replace_root_hash(new_hash) def backward(self): - pass + @property + def mode(self): + if self._is_root_pwd_listed(SMALL_PWD_LIST): + return "auto" + + return "manual" + + @property + def disclaimer(self): + if self._is_root_pwd_listed(SMALL_PWD_LIST): + return None + + return m18n.n("migration_0006_root_admin_sync_warning") + def _get_admin_hash(self): """ Ask for admin hash the ldap db From 5e91b5c780424434d8ecd99d05206c9421fb9cc9 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 14:23:40 +0000 Subject: [PATCH 06/11] Smol fix to remove {CRYPT} in front of hash --- src/yunohost/data_migrations/0006_migrate_pwd.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_migrate_pwd.py index c803049853..6413086ae7 100644 --- a/src/yunohost/data_migrations/0006_migrate_pwd.py +++ b/src/yunohost/data_migrations/0006_migrate_pwd.py @@ -50,7 +50,8 @@ def _get_admin_hash(self): | tr -d '\n ' \ | tr ':' ' ' \ | awk '{print $2}' \ - | base64 -d") + | base64 -d \ + | sed 's/{CRYPT}//g'") return admin_hash def _replace_root_hash(self, new_hash): From ae3bf28481ab9d9edbef483da071a6c223521fd2 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 14:38:49 +0000 Subject: [PATCH 07/11] Misc naming, description and comments improvements --- locales/en.json | 3 ++- ...wd.py => 0006_sync_admin_and_root_passwords.py} | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) rename src/yunohost/data_migrations/{0006_migrate_pwd.py => 0006_sync_admin_and_root_passwords.py} (80%) diff --git a/locales/en.json b/locales/en.json index cb9d535609..77d40c17af 100644 --- a/locales/en.json +++ b/locales/en.json @@ -271,6 +271,7 @@ "migration_description_0003_migrate_to_stretch": "Upgrade the system to Debian Stretch and YunoHost 3.0", "migration_description_0004_php5_to_php7_pools": "Reconfigure the PHP pools to use PHP 7 instead of 5", "migration_description_0005_postgresql_9p4_to_9p6": "Migrate databases from postgresql 9.4 to 9.6", + "migration_description_0006_sync_admin_and_root_passwords": "Synchronize admin and root passwords", "migration_0003_backward_impossible": "The stretch migration cannot be reverted.", "migration_0003_start": "Starting migration to Stretch. The logs will be available in {logfile}.", "migration_0003_patching_sources_list": "Patching the sources.lists ...", @@ -287,7 +288,7 @@ "migration_0005_postgresql_94_not_installed": "Postgresql was not installed on your system. Nothing to do!", "migration_0005_postgresql_96_not_installed": "Postgresql 9.4 has been found to be installed, but not postgresql 9.6 !? Something weird might have happened on your system :( ...", "migration_0005_not_enough_space": "Not enough space is available in {path} to run the migration right now :(.", - "migration_0006_root_admin_sync_warning": "Yunohost now expect admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by your root password.", + "migration_0006_disclaimer": "Yunohost now expects admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by the admin password.", "migrations_backward": "Migrating backward.", "migrations_bad_value_for_target": "Invalid number for target argument, available migrations numbers are 0 or {}", "migrations_cant_reach_migration_file": "Can't access migrations files at path %s", diff --git a/src/yunohost/data_migrations/0006_migrate_pwd.py b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py similarity index 80% rename from src/yunohost/data_migrations/0006_migrate_pwd.py rename to src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py index 6413086ae7..9b74952cc2 100644 --- a/src/yunohost/data_migrations/0006_migrate_pwd.py +++ b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py @@ -16,7 +16,7 @@ SMALL_PWD_LIST = ["yunohost", "olinux"] class MyMigration(Migration): - "Migrate password" + "Synchronize admin and root passwords" def migrate(self): @@ -28,17 +28,21 @@ def backward(self): @property def mode(self): - if self._is_root_pwd_listed(SMALL_PWD_LIST): - return "auto" - return "manual" + # If the root password is still a "default" value, + # then this is an emergency and migration shall + # be applied automatically + # + # Otherwise, as playing with root password is touchy, + # we set this as a manual migration. + return "auto" if self._is_root_pwd_listed(SMALL_PWD_LIST) else "manual" @property def disclaimer(self): if self._is_root_pwd_listed(SMALL_PWD_LIST): return None - return m18n.n("migration_0006_root_admin_sync_warning") + return m18n.n("migration_0006_disclaimer") def _get_admin_hash(self): """ From feb45578db235e62985ab7dc4eecdd5dfaf06890 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 15:13:05 +0000 Subject: [PATCH 08/11] Improve wording --- locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en.json b/locales/en.json index 77d40c17af..ef762fa418 100644 --- a/locales/en.json +++ b/locales/en.json @@ -366,7 +366,7 @@ "restore_running_app_script": "Running restore script of app '{app:s}'...", "restore_running_hooks": "Running restoration hooks...", "restore_system_part_failed": "Unable to restore the '{part:s}' system part", - "root_password_desynchronized": "Password of the user admin has been changed, but Root password has not been synchronized with your new admin password !", + "root_password_desynchronized": "The admin password has been changed, but YunoHost was unable to propagate this on the root password !", "server_shutdown": "The server will shutdown", "server_shutdown_confirm": "The server will shutdown immediatly, are you sure? [{answers:s}]", "server_reboot": "The server will reboot", From 848a6b6088a6163767711eb844182eca72456e7c Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 15:18:44 +0000 Subject: [PATCH 09/11] Gotta remove that '{CRYPT}' thing here too --- src/yunohost/tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py index 7221e6804f..9bd4c9e886 100644 --- a/src/yunohost/tools.py +++ b/src/yunohost/tools.py @@ -145,7 +145,7 @@ def tools_adminpw(auth, new_password): with open('/etc/shadow', 'w') as after_file: after_file.write(before.replace("root:" + hash_root, - "root:" + new_hash)) + "root:" + new_hash.replace('{CRYPT}', ''))) except IOError as e: logger.warning(m18n.n('root_password_desynchronized')) return From 3f3069d0809af148e3b9b4757d6755f3b6c49bf0 Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 15:35:46 +0000 Subject: [PATCH 10/11] Add info message after the migration is complete --- locales/en.json | 1 + .../data_migrations/0006_sync_admin_and_root_passwords.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/locales/en.json b/locales/en.json index ef762fa418..703db0b7ea 100644 --- a/locales/en.json +++ b/locales/en.json @@ -289,6 +289,7 @@ "migration_0005_postgresql_96_not_installed": "Postgresql 9.4 has been found to be installed, but not postgresql 9.6 !? Something weird might have happened on your system :( ...", "migration_0005_not_enough_space": "Not enough space is available in {path} to run the migration right now :(.", "migration_0006_disclaimer": "Yunohost now expects admin and root passwords to be synchronized. By running this migration, your root password is going to be replaced by the admin password.", + "migration_0006_done": "Your root password have been replaced by your admin password.", "migrations_backward": "Migrating backward.", "migrations_bad_value_for_target": "Invalid number for target argument, available migrations numbers are 0 or {}", "migrations_cant_reach_migration_file": "Can't access migrations files at path %s", diff --git a/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py index 9b74952cc2..0bcb3cd3ab 100644 --- a/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py +++ b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py @@ -23,6 +23,8 @@ def migrate(self): new_hash = self._get_admin_hash() self._replace_root_hash(new_hash) + logger.info(m18n.n("migration_0006_done")) + def backward(self): pass From a94e69f760f37aa80b2d52c44d444321d7b5ae8e Mon Sep 17 00:00:00 2001 From: Alexandre Aubin Date: Thu, 25 Oct 2018 18:09:11 +0200 Subject: [PATCH 11/11] Make the SMALL_PWD_LIST consistent with cracklib's PR --- .../data_migrations/0006_sync_admin_and_root_passwords.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py index 0bcb3cd3ab..366363f223 100644 --- a/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py +++ b/src/yunohost/data_migrations/0006_sync_admin_and_root_passwords.py @@ -13,7 +13,7 @@ from yunohost.tools import Migration logger = getActionLogger('yunohost.migration') -SMALL_PWD_LIST = ["yunohost", "olinux"] +SMALL_PWD_LIST = ["yunohost", "olinuxino", "olinux", "raspberry", "admin", "root", "test", "rpi"] class MyMigration(Migration): "Synchronize admin and root passwords"