diff options
| author | Christian Breunig <christian@breunig.cc> | 2025-12-09 23:15:15 +0100 |
|---|---|---|
| committer | Christian Breunig <christian@breunig.cc> | 2025-12-17 21:27:23 +0100 |
| commit | 5566e6035b42e99eb874c3c5a35fe72e8435df38 (patch) | |
| tree | 1ffcb1016fcf4b028021d28846f06d465882dba4 | |
| parent | cd11ba957a33933742304b4efbba77461e803cb3 (diff) | |
| download | vyos-1x-5566e6035b42e99eb874c3c5a35fe72e8435df38.tar.gz vyos-1x-5566e6035b42e99eb874c3c5a35fe72e8435df38.zip | |
login: T8086: replace getpwall() occurances with get_local_passwd_entries()
Switch to our custom implementation to avoid NSS/TACACS timeouts as explained
in commit 4c9eaaa96e06 ("login: replace getpwall() user enumeration to avoid
NSS/TACACS timeouts").
| -rwxr-xr-x | smoketest/scripts/cli/test_service_ssh.py | 5 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_system_login.py | 4 | ||||
| -rwxr-xr-x | src/conf_mode/system_login.py | 4 | ||||
| -rwxr-xr-x | src/op_mode/show_users.py | 4 |
4 files changed, 8 insertions, 9 deletions
diff --git a/smoketest/scripts/cli/test_service_ssh.py b/smoketest/scripts/cli/test_service_ssh.py index 4ef3dd51d..8cd4a2178 100755 --- a/smoketest/scripts/cli/test_service_ssh.py +++ b/smoketest/scripts/cli/test_service_ssh.py @@ -19,12 +19,11 @@ import paramiko import re import unittest -from pwd import getpwall - from base_vyostest_shim import VyOSUnitTestSHIM from vyos.configsession import ConfigSessionError from vyos.defaults import config_files +from vyos.utils.auth import get_local_passwd_entries from vyos.utils.process import cmd from vyos.utils.process import is_systemd_service_running from vyos.utils.process import process_named_running @@ -311,7 +310,7 @@ class TestServiceSSH(VyOSUnitTestSHIM.TestCase): self.cli_commit() # After deletion the test user is not allowed to remain in /etc/passwd - usernames = [x[0] for x in getpwall()] + usernames = [x.pw_name for x in get_local_passwd_entries()] self.assertNotIn(test_user, usernames) def test_ssh_dynamic_protection(self): diff --git a/smoketest/scripts/cli/test_system_login.py b/smoketest/scripts/cli/test_system_login.py index b67f3f546..77027ef01 100755 --- a/smoketest/scripts/cli/test_system_login.py +++ b/smoketest/scripts/cli/test_system_login.py @@ -28,11 +28,11 @@ from base_vyostest_shim import VyOSUnitTestSHIM from gzip import GzipFile from subprocess import Popen from subprocess import PIPE -from pwd import getpwall from vyos.configsession import ConfigSessionError from vyos.configquery import ConfigTreeQuery from vyos.utils.auth import get_current_user +from vyos.utils.auth import get_local_passwd_entries from vyos.utils.process import cmd from vyos.utils.file import read_file from vyos.utils.file import write_file @@ -175,7 +175,7 @@ class TestSystemLogin(VyOSUnitTestSHIM.TestCase): self.cli_commit() # After deletion, a user is not allowed to remain in /etc/passwd - usernames = [x[0] for x in getpwall()] + usernames = [x.pw_name for x in get_local_passwd_entries()] for user in users: self.assertNotIn(user, usernames) # always forward to base class diff --git a/src/conf_mode/system_login.py b/src/conf_mode/system_login.py index 2692f427f..4da1d10ae 100755 --- a/src/conf_mode/system_login.py +++ b/src/conf_mode/system_login.py @@ -21,7 +21,6 @@ import json from copy import deepcopy from passlib.hosts import linux_context from psutil import users -from pwd import getpwall from pwd import getpwuid from sys import exit from time import sleep @@ -38,6 +37,7 @@ from vyos.template import is_ipv4 from vyos.utils.auth import EPasswdStrength from vyos.utils.auth import evaluate_strength from vyos.utils.auth import get_current_user +from vyos.utils.auth import get_local_passwd_entries from vyos.utils.auth import get_local_users from vyos.utils.auth import get_user_home_dir from vyos.utils.auth import MIN_USER_UID @@ -136,7 +136,7 @@ def verify(login): raise ConfigError(f'Attempting to delete current user: {tmp}') if 'user' in login: - system_users = getpwall() + system_users = get_local_passwd_entries() for user, user_config in login['user'].items(): # Linux system users range up until UID 1000, we can not create a # VyOS CLI user which already exists as system user diff --git a/src/op_mode/show_users.py b/src/op_mode/show_users.py index c60b9932b..086c8b1e2 100755 --- a/src/op_mode/show_users.py +++ b/src/op_mode/show_users.py @@ -13,15 +13,15 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. + import argparse -import pwd import struct import sys from time import ctime from tabulate import tabulate from vyos.config import Config - +from vyos.utils.auth import get_local_passwd_entries class UserInfo: def __init__(self, uid, name, user_type, is_locked, login_time, tty, host): |
