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_start.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_start.c')
-rw-r--r-- | libpam/pam_start.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/libpam/pam_start.c b/libpam/pam_start.c index e27c64bb..59d06224 100644 --- a/libpam/pam_start.c +++ b/libpam/pam_start.c @@ -15,10 +15,11 @@ #include <string.h> #include <syslog.h> -int pam_start ( +static int _pam_start_internal ( const char *service_name, const char *user, const struct pam_conv *pam_conversation, + const char *confdir, pam_handle_t **pamh) { D(("called pam_start: [%s] [%s] [%p] [%p]" @@ -80,6 +81,18 @@ int pam_start ( } else (*pamh)->user = NULL; + if (confdir) { + if (((*pamh)->confdir = _pam_strdup(confdir)) == NULL) { + pam_syslog(*pamh, LOG_CRIT, + "pam_start: _pam_strdup failed for confdir"); + _pam_drop((*pamh)->service_name); + _pam_drop((*pamh)->user); + _pam_drop(*pamh); + return (PAM_BUF_ERR); + } + } else + (*pamh)->confdir = NULL; + (*pamh)->tty = NULL; (*pamh)->prompt = NULL; /* prompt for pam_get_user() */ (*pamh)->ruser = NULL; @@ -140,3 +153,24 @@ int pam_start ( return PAM_SUCCESS; } + +int pam_start_confdir ( + const char *service_name, + const char *user, + const struct pam_conv *pam_conversation, + const char *confdir, + pam_handle_t **pamh) +{ + return _pam_start_internal(service_name, user, pam_conversation, + confdir, pamh); +} + +int pam_start ( + const char *service_name, + const char *user, + const struct pam_conv *pam_conversation, + pam_handle_t **pamh) +{ + return _pam_start_internal(service_name, user, pam_conversation, + NULL, pamh); +} |