at master 1.7 kB view raw
1expected_lines = { 2 "account required @@pam@@/lib/security/pam_unix.so", 3 "account sufficient @@pam_krb5@@/lib/security/pam_krb5.so", 4 "auth [default=die success=done] @@pam_ccreds@@/lib/security/pam_ccreds.so action=validate use_first_pass", 5 "auth [default=ignore success=1 service_err=reset] @@pam_krb5@@/lib/security/pam_krb5.so use_first_pass", 6 "auth required @@pam@@/lib/security/pam_deny.so", 7 "auth sufficient @@pam_ccreds@@/lib/security/pam_ccreds.so action=store use_first_pass", 8 "auth sufficient @@pam@@/lib/security/pam_rootok.so", 9 "auth sufficient @@pam@@/lib/security/pam_unix.so likeauth try_first_pass", 10 "password sufficient @@pam_krb5@@/lib/security/pam_krb5.so use_first_pass", 11 "password sufficient @@pam@@/lib/security/pam_unix.so nullok yescrypt", 12 "session optional @@pam_krb5@@/lib/security/pam_krb5.so", 13 "session required @@pam@@/lib/security/pam_env.so conffile=/etc/pam/environment readenv=0", 14 "session required @@pam@@/lib/security/pam_unix.so", 15} 16actual_lines = set(machine.succeed("cat /etc/pam.d/chfn").splitlines()) 17 18stripped_lines = set([line.split("#")[0].rstrip() for line in actual_lines]) 19missing_lines = expected_lines - stripped_lines 20extra_lines = stripped_lines - expected_lines 21non_functional_lines = set([line for line in extra_lines if line == ""]) 22unexpected_functional_lines = extra_lines - non_functional_lines 23 24with subtest("All expected lines are in the file"): 25 assert not missing_lines, f"Missing lines: {missing_lines}" 26 27with subtest("All remaining lines are empty or comments"): 28 assert not unexpected_functional_lines, f"Unexpected lines: {unexpected_functional_lines}"