diff --git a/src/tests/system/tests/test_authentication.py b/src/tests/system/tests/test_authentication.py index d7f0114bb4..02d5b97c4c 100644 --- a/src/tests/system/tests/test_authentication.py +++ b/src/tests/system/tests/test_authentication.py @@ -9,6 +9,7 @@ import pytest from sssd_test_framework.roles.client import Client from sssd_test_framework.roles.generic import GenericProvider +from sssd_test_framework.roles.ldap import LDAP from sssd_test_framework.topology import KnownTopologyGroup @@ -96,3 +97,61 @@ def test_authentication__default_settings_when_the_provider_is_offline( assert client.auth.parametrize(method).password(user, correct), "User failed login!" assert not client.auth.parametrize(method).password(user, wrong), "User logged in with an incorrect password!" + + +@pytest.mark.topology(KnownTopologyGroup.AnyProvider) +@pytest.mark.parametrize( + "home_key", + ["user", "uid", "fqn", "domain", "first_char", "upn", "default", "lowercase", "substring", "literal%"], +) +@pytest.mark.importance("medium") +def test_authentication__with_overriding_home_directory(client: Client, provider: GenericProvider, home_key: str): + """ + :title: Override the user's home directory + :description: + For simplicity, the home directory is set to '/home/user1' because some providers homedirs are different. + :setup: + 1. Create user and set home directory to '/home/user1' + 2. Configure SSSD with 'override_homedir' home_key value and restart SSSD + 3. Get entry for 'user1' + :steps: + 1. Login as 'user1' and check working directory + :expectedresults: + 1. Login is successful and working directory matches the expected value + :customerscenario: False + """ + provider.user("user1").add(password="Secret123", home="/home/user1") + client.sssd.common.mkhomedir() + client.sssd.start() + + user = client.tools.getent.passwd("user1") + assert user is not None + + home_map: dict[str, list[str]] = { + "user": ["/home/%u", f"/home/{user.name}"], + "uid": ["/home/%U", f"/home/{user.uid}"], + "fqn": ["/home/%f", f"/home/{user.name}@{client.sssd.default_domain}"], + "domain": ["/home/%d/%u", f"/home/{client.sssd.default_domain}/{user.name}"], + "first_char": ["/home/%l", f"/home/{str(user.name)[0]}"], + "upn": ["/home/%P", f"/home/{user.name}@{provider.domain.upper()}"], + "default": ["%o", f"{user.home}"], + "lowercase": ["%h", f"{str(user.home).lower()}"], + "substring": ["%H/%u", f"/home/homedir/{user.name}"], + "literal%": ["/home/%%/%u", f"/home/%/{user.name}"], + } + + if home_key == "upn" and isinstance(provider, LDAP): + pytest.skip("Skipping provider, userPrincipal attribute is not set!") + + if home_key == "domain": + client.fs.mkdir_p(f"/home/{client.sssd.default_domain}") + + home_fmt, home_exp = home_map[home_key] + client.sssd.domain["homedir_substring"] = "/home/homedir" + client.sssd.domain["override_homedir"] = home_fmt + client.sssd.restart(clean=True) + + with client.ssh("user1", "Secret123") as ssh: + result = ssh.run("pwd").stdout + assert result is not None, "Getting path failed!" + assert result == home_exp, f"Current path {result} is not {home_exp}!"