diff options
author | Stefan Schubert <schubi@suse.de> | 2021-12-03 14:33:20 +0100 |
---|---|---|
committer | Thorsten Kukuk <5908016+thkukuk@users.noreply.github.com> | 2022-12-14 09:29:35 +0100 |
commit | 6135c45347b6173e305fda66eef138bde693b795 (patch) | |
tree | c67f2d947b9f9411268efb1f1ae1f611be0bb636 /modules/pam_env/tst-pam_env-retval.c | |
parent | d71de05146d03c271bd5507724d24d1ad17c2be5 (diff) | |
download | pam-6135c45347b6173e305fda66eef138bde693b795.tar.gz pam-6135c45347b6173e305fda66eef138bde693b795.tar.bz2 pam-6135c45347b6173e305fda66eef138bde693b795.zip |
pam_env: Use vendor specific pam_env.conf and environment as fallback
Use the vendor directory as fallback for a distribution provided default
config if there is no one in /etc.
* Makefile.am: Add libeconf setting.
* pam_env.c: Take care about the fallback configuration in the vendor directory.
* pam_env.8.xml: Add description for the vendor directory.
* pam_env.conf.5.xml: Add description for the vendor directory.
* tst-pam_env-retval.c: Add tests for libeconf.
* configure.ac: Add ECONF settings for building man pages.
Diffstat (limited to 'modules/pam_env/tst-pam_env-retval.c')
-rw-r--r-- | modules/pam_env/tst-pam_env-retval.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/modules/pam_env/tst-pam_env-retval.c b/modules/pam_env/tst-pam_env-retval.c index 6b9b3065..99e2e2a5 100644 --- a/modules/pam_env/tst-pam_env-retval.c +++ b/modules/pam_env/tst-pam_env-retval.c @@ -17,11 +17,18 @@ #define MODULE_NAME "pam_env" #define TEST_NAME "tst-" MODULE_NAME "-retval" +#define TEST_NAME_DIR TEST_NAME ".dir" static const char service_file[] = TEST_NAME ".service"; static const char missing_file[] = TEST_NAME ".missing"; +static const char dir[] = TEST_NAME_DIR; +static const char dir_usr[] = TEST_NAME_DIR "/usr"; +static const char dir_usr_etc[] = TEST_NAME_DIR "/usr/etc"; +static const char dir_usr_etc_security[] = TEST_NAME_DIR "/usr/etc/security"; static const char my_conf[] = TEST_NAME ".conf"; static const char my_env[] = TEST_NAME ".env"; +static const char usr_env[] = TEST_NAME_DIR "/usr/etc/environment"; +static const char usr_conf[] = TEST_NAME_DIR "/usr/etc/security/pam_env.conf"; static struct pam_conv conv; @@ -30,6 +37,11 @@ setup(void) { FILE *fp; + ASSERT_EQ(0, mkdir(dir, 0755)); + ASSERT_EQ(0, mkdir(dir_usr, 0755)); + ASSERT_EQ(0, mkdir(dir_usr_etc, 0755)); + ASSERT_EQ(0, mkdir(dir_usr_etc_security, 0755)); + ASSERT_NE(NULL, fp = fopen(my_conf, "w")); ASSERT_LT(0, fprintf(fp, "EDITOR\tDEFAULT=vim\n" @@ -41,6 +53,18 @@ setup(void) "test_value=foo\n" "test2_value=bar\n")); ASSERT_EQ(0, fclose(fp)); + + ASSERT_NE(NULL, fp = fopen(usr_env, "w")); + ASSERT_LT(0, fprintf(fp, + "usr_etc_test=foo\n" + "usr_etc_test2=bar\n")); + ASSERT_EQ(0, fclose(fp)); + + ASSERT_NE(NULL, fp = fopen(usr_conf, "w")); + ASSERT_LT(0, fprintf(fp, + "PAGER DEFAULT=emacs\n" + "MANPAGER DEFAULT=less\n")); + ASSERT_EQ(0, fclose(fp)); } static void @@ -48,6 +72,12 @@ cleanup(void) { ASSERT_EQ(0, unlink(my_conf)); ASSERT_EQ(0, unlink(my_env)); + ASSERT_EQ(0, unlink(usr_env)); + ASSERT_EQ(0, unlink(usr_conf)); + ASSERT_EQ(0, rmdir(dir_usr_etc_security)); + ASSERT_EQ(0, rmdir(dir_usr_etc)); + ASSERT_EQ(0, rmdir(dir_usr)); + ASSERT_EQ(0, rmdir(dir)); } static void @@ -191,6 +221,36 @@ main(void) const char *env2[] = { "test_value=foo", "test2_value=bar", NULL }; check_env(env2); +#if defined (USE_ECONF) && defined (VENDORDIR) + + /* envfile is a directory. So values will be read from {TEST_NAME_DIR}/usr/etc and {TEST_NAME_DIR}/etc */ + ASSERT_NE(NULL, fp = fopen(service_file, "w")); + ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n" + "session required %s/.libs/%s.so" + " conffile=%s envfile=%s/%s/\n", + cwd, MODULE_NAME, + "/dev/null", + cwd, dir)); + ASSERT_EQ(0, fclose(fp)); + + const char *env3[] = {"usr_etc_test=foo", "usr_etc_test2=bar", NULL}; + check_env(env3); + + /* conffile is a directory. So values will be read from {TEST_NAME_DIR}/usr/etc and {TEST_NAME_DIR}/etc */ + ASSERT_NE(NULL, fp = fopen(service_file, "w")); + ASSERT_LT(0, fprintf(fp, "#%%PAM-1.0\n" + "session required %s/.libs/%s.so" + " conffile=%s/%s/ envfile=%s\n", + cwd, MODULE_NAME, + cwd, dir, + "/dev/null")); + ASSERT_EQ(0, fclose(fp)); + + const char *env4[] = {"PAGER=emacs", "MANPAGER=less", NULL}; + check_env(env4); + +#endif + /* cleanup */ cleanup(); ASSERT_EQ(0, unlink(service_file)); |