aboutsummaryrefslogtreecommitdiff
path: root/libpam_internal
diff options
context:
space:
mode:
Diffstat (limited to 'libpam_internal')
-rw-r--r--libpam_internal/pam_econf.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/libpam_internal/pam_econf.c b/libpam_internal/pam_econf.c
index 595c122a..b3b9874d 100644
--- a/libpam_internal/pam_econf.c
+++ b/libpam_internal/pam_econf.c
@@ -18,8 +18,31 @@ econf_err pam_econf_readconfig(econf_file **key_file,
bool (*callback)(const char *filename, const void *data),
const void *callback_data)
{
- econf_err ret;
+ econf_err ret = ECONF_SUCCESS;
D(("Read configuration from directory %s and %s", etc_conf_dir, usr_conf_dir));
+
+#ifdef HAVE_ECONF_READCONFIG
+
+ char *parsing_dirs = NULL;
+ if (asprintf(&parsing_dirs, "PARSING_DIRS=%s:%s", usr_conf_dir, etc_conf_dir) < 0) {
+ ret = ECONF_NOMEM;
+ parsing_dirs = NULL;
+ }
+ if (ret == ECONF_SUCCESS)
+ ret = econf_newKeyFile_with_options(key_file, parsing_dirs);
+ if (ret == ECONF_SUCCESS)
+ ret = econf_readConfigWithCallback(key_file,
+ NULL,
+ usr_conf_dir,
+ config_name,
+ config_suffix,
+ delim,
+ comment,
+ callback, callback_data);
+ free(parsing_dirs);
+
+#else
+
ret = econf_readDirsWithCallback(key_file,
usr_conf_dir,
etc_conf_dir,
@@ -28,6 +51,9 @@ econf_err pam_econf_readconfig(econf_file **key_file,
delim,
comment,
callback, callback_data);
+
+#endif
+
return ret;
}