diff options
author | Christian Poessinger <christian@poessinger.com> | 2022-04-04 23:01:38 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2022-04-04 23:01:38 +0200 |
commit | 796178f69ce09e28ab9f20c7b5e1ce97ef00a1ff (patch) | |
tree | 1185d748467e91aef7ee338fa7c6559652bd849b | |
parent | 6a04ff2840dfcfcad7a1cb93baf210370fa8871e (diff) | |
download | vyos-1x-796178f69ce09e28ab9f20c7b5e1ce97ef00a1ff.tar.gz vyos-1x-796178f69ce09e28ab9f20c7b5e1ce97ef00a1ff.zip |
login: T4341: busy wait on userdel(8) until the account was deleted successfully
-rwxr-xr-x | src/conf_mode/system-login.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/conf_mode/system-login.py b/src/conf_mode/system-login.py index 9b8f194fb..c9c6aa187 100755 --- a/src/conf_mode/system-login.py +++ b/src/conf_mode/system-login.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (C) 2020-2021 VyOS maintainers and contributors +# Copyright (C) 2020-2022 VyOS maintainers and contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or later as @@ -23,6 +23,7 @@ from pwd import getpwall from pwd import getpwnam from spwd import getspnam from sys import exit +from time import sleep from vyos.config import Config from vyos.configdict import dict_merge @@ -31,6 +32,7 @@ from vyos.template import render from vyos.template import is_ipv4 from vyos.util import cmd from vyos.util import call +from vyos.util import run from vyos.util import DEVNULL from vyos.util import dict_search from vyos.xml import defaults @@ -256,10 +258,16 @@ def apply(login): # Logout user if he is still logged in if user in list(set([tmp[0] for tmp in users()])): print(f'{user} is logged in, forcing logout!') - call(f'pkill -HUP -u {user}') - - # Remove user account but leave home directory to be safe - call(f'userdel --remove {user}', stderr=DEVNULL) + # re-run command until user is logged out + while run(f'pkill -HUP -u {user}'): + sleep(0.250) + + # Remove user account but leave home directory in place. Re-run + # command until user is removed - userdel might return 8 as + # SSH sessions are not all yet properly cleaned away, thus we + # simply re-run the command until the account wen't away + while run(f'userdel --remove {user}', stderr=DEVNULL): + sleep(0.250) except Exception as e: raise ConfigError(f'Deleting user "{user}" raised exception: {e}') |