diff options
author | Tomas Mraz <tmraz@fedoraproject.org> | 2020-02-24 18:19:57 +0100 |
---|---|---|
committer | Tomas Mraz <tmraz@fedoraproject.org> | 2020-03-06 08:50:12 +0100 |
commit | 7a84910896d5579bd9c016696224d7d69a307bd9 (patch) | |
tree | 1abf896a33f1f581daafeb3f4ee8a52ba63155a6 /libpam/pam_handlers.c | |
parent | bba3a4f67e58c2c6bb42861784ffc60a7cf080e8 (diff) | |
download | pam-7a84910896d5579bd9c016696224d7d69a307bd9.tar.gz pam-7a84910896d5579bd9c016696224d7d69a307bd9.tar.bz2 pam-7a84910896d5579bd9c016696224d7d69a307bd9.zip |
New API call pam_start_confdir()
To load PAM stack configurations from specified directory
Diffstat (limited to 'libpam/pam_handlers.c')
-rw-r--r-- | libpam/pam_handlers.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c index 8e513da3..5dff58c2 100644 --- a/libpam/pam_handlers.c +++ b/libpam/pam_handlers.c @@ -285,7 +285,7 @@ _pam_open_config_file(pam_handle_t *pamh , PAM_CONFIG_DIST2_DF #endif }; - char *p; + char *p = NULL; FILE *f; size_t i; @@ -296,14 +296,21 @@ _pam_open_config_file(pam_handle_t *pamh pam_syslog(pamh, LOG_CRIT, "strdup failed"); return PAM_BUF_ERR; } + } else if (pamh->confdir != NULL) { + if (asprintf (&p, "%s/%s", pamh->confdir, service) < 0) { + pam_syslog(pamh, LOG_CRIT, "asprintf failed"); + return PAM_BUF_ERR; + } + } - f = fopen(service, "r"); + if (p != NULL) { + D(("opening %s", p)); + f = fopen(p, "r"); if (f != NULL) { *path = p; *file = f; return PAM_SUCCESS; } - _pam_drop(p); return PAM_ABORT; } @@ -313,6 +320,7 @@ _pam_open_config_file(pam_handle_t *pamh pam_syslog(pamh, LOG_CRIT, "asprintf failed"); return PAM_BUF_ERR; } + D(("opening %s", p)); f = fopen(p, "r"); if (f != NULL) { @@ -438,7 +446,8 @@ int _pam_init_handlers(pam_handle_t *pamh) struct stat test_d; /* Is there a PAM_CONFIG_D directory? */ - if ((stat(PAM_CONFIG_D, &test_d) == 0 && S_ISDIR(test_d.st_mode)) || + if (pamh->confdir != NULL || + (stat(PAM_CONFIG_D, &test_d) == 0 && S_ISDIR(test_d.st_mode)) || (stat(PAM_CONFIG_DIST_D, &test_d) == 0 && S_ISDIR(test_d.st_mode)) #ifdef PAM_CONFIG_DIST2_D || (stat(PAM_CONFIG_DIST2_D, &test_d) == 0 @@ -471,7 +480,8 @@ int _pam_init_handlers(pam_handle_t *pamh) #ifdef PAM_READ_BOTH_CONFS D(("checking %s", PAM_CONFIG)); - if ((f = fopen(PAM_CONFIG,"r")) != NULL) { + if (pamh->confdir == NULL + && (f = fopen(PAM_CONFIG,"r")) != NULL) { retval = _pam_parse_conf_file(pamh, f, NULL, PAM_T_ANY, 0, 1); fclose(f); } else |