From 7fef29d7aa90174eb018372402bbda270e6da73a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 15:39:18 +0100 Subject: [PATCH] make sshd test work on macOS --- pkgs/clan-cli/tests/sshd.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkgs/clan-cli/tests/sshd.py b/pkgs/clan-cli/tests/sshd.py index 571c900aa..1b9281a34 100644 --- a/pkgs/clan-cli/tests/sshd.py +++ b/pkgs/clan-cli/tests/sshd.py @@ -76,16 +76,20 @@ exec {bash} -l "${{@}}" login_shell.chmod(0o755) lib_path = None - assert platform == "linux", ( - f"we do not support the ld_preload trick on non-linux just now. Got {platform}" - ) + + extension = ".so" + if platform == "darwin": + extension = ".dylib" + link_lib_flag = "-shared" + if platform == "darwin": + link_lib_flag = "-dynamiclib" # This enforces a login shell by overriding the login shell of `getpwnam(3)` - lib_path = tmpdir / "libgetpwnam-preload.so" + lib_path = tmpdir / f"libgetpwnam-preload.${extension}" subprocess.run( [ os.environ.get("CC", "cc"), - "-shared", + link_lib_flag, "-o", lib_path, str(test_root / "getpwnam-preload.c"), @@ -109,8 +113,12 @@ def sshd( sshd = shutil.which("sshd") assert sshd is not None, "no sshd binary found" env = {} + preload_env_name = "LD_PRELOAD" + if platform == "darwin": + preload_env_name = "DYLD_INSERT_LIBRARIES" + env = { - "LD_PRELOAD": str(sshd_config.preload_lib), + preload_env_name: str(sshd_config.preload_lib), "LOGIN_SHELL": str(sshd_config.login_shell), } proc = command.run(