From 8f6bfb2961845f2b4ef68c4176b254f3c78c1bd5 Mon Sep 17 00:00:00 2001 From: lejeune quentin Date: Thu, 1 Feb 2024 09:50:12 +0100 Subject: [PATCH] [FIX] hw_drivers: Protect a subprocess call we execute a subprocess without checking if an error occurs so we place the subprocess.call() in a try except closes odoo/odoo#152331 X-original-commit: 4adda36260f3ba0fdf75688b419593006b80adb7 Signed-off-by: Yaroslav Soroko (yaso) Signed-off-by: Quentin Lejeune (qle) --- addons/hw_drivers/tools/helpers.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/addons/hw_drivers/tools/helpers.py b/addons/hw_drivers/tools/helpers.py index 328da8b0af2..8c68ea7a478 100644 --- a/addons/hw_drivers/tools/helpers.py +++ b/addons/hw_drivers/tools/helpers.py @@ -199,13 +199,15 @@ def generate_password(): """ alphabet = 'abcdefghijkmnpqrstuvwxyz23456789' password = ''.join(secrets.choice(alphabet) for i in range(12)) - shadow_password = crypt.crypt(password, crypt.mksalt()) - subprocess.call(('sudo', 'usermod', '-p', shadow_password, 'pi')) - - with writable(): - subprocess.call(('sudo', 'cp', '/etc/shadow', '/root_bypass_ramdisks/etc/shadow')) - - return password + try: + shadow_password = crypt.crypt(password, crypt.mksalt()) + subprocess.run(('sudo', 'usermod', '-p', shadow_password, 'pi'), check=True) + with writable(): + subprocess.run(('sudo', 'cp', '/etc/shadow', '/root_bypass_ramdisks/etc/shadow'), check=True) + return password + except subprocess.CalledProcessError as e: + _logger.error("Failed to generate password: %s", e.output) + return 'Error: Check IoT log' def get_certificate_status(is_first=True):