diff options
author | Stefan Schubert <schubi@suse.de> | 2024-06-27 16:06:36 +0200 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2024-07-02 08:00:00 +0000 |
commit | bc461898448a1bf306fc094cdf6a5a197c4e2753 (patch) | |
tree | 03a14e47e3cbdfbe55e15aee53a2183700dd9737 | |
parent | efa6e33b1da594f2a2c4c2c8871416a3d5011015 (diff) | |
download | pam-bc461898448a1bf306fc094cdf6a5a197c4e2753.tar.gz pam-bc461898448a1bf306fc094cdf6a5a197c4e2753.tar.bz2 pam-bc461898448a1bf306fc094cdf6a5a197c4e2753.zip |
libpam_internal: introduce pam_econf_readconfig
Use this new function instead of econf_readDirs() and
econf_readDirsWithCallback().
Co-authored-by: Dmitry V. Levin <ldv@strace.io>
-rw-r--r-- | libpam/pam_modutil_searchkey.c | 12 | ||||
-rw-r--r-- | libpam_internal/Makefile.am | 8 | ||||
-rw-r--r-- | libpam_internal/include/pam_econf.h | 22 | ||||
-rw-r--r-- | libpam_internal/pam_econf.c | 34 | ||||
-rw-r--r-- | modules/pam_env/Makefile.am | 5 | ||||
-rw-r--r-- | modules/pam_env/pam_env.c | 7 | ||||
-rw-r--r-- | modules/pam_shells/Makefile.am | 8 | ||||
-rw-r--r-- | modules/pam_shells/pam_shells.c | 24 |
8 files changed, 93 insertions, 27 deletions
diff --git a/libpam/pam_modutil_searchkey.c b/libpam/pam_modutil_searchkey.c index 5480db1d..ccf2461f 100644 --- a/libpam/pam_modutil_searchkey.c +++ b/libpam/pam_modutil_searchkey.c @@ -14,7 +14,7 @@ #include <stdlib.h> #include <ctype.h> #ifdef USE_ECONF -#include <libeconf.h> +#include "pam_econf.h" #endif #ifdef USE_ECONF @@ -29,10 +29,14 @@ econf_search_key (const char *name, const char *suffix, const char *key) { econf_file *key_file = NULL; char *val; + econf_err error; - if (econf_readDirs (&key_file, VENDORDIR, SYSCONFDIR, name, suffix, - " \t", "#")) - return NULL; + error = pam_econf_readconfig (&key_file, VENDORDIR, SYSCONFDIR, name, suffix, + " \t", "#", NULL, NULL); + if (error != ECONF_SUCCESS) { + econf_free (key_file); + return NULL; + } if (econf_getStringValue (key_file, NULL, key, &val)) { econf_free (key_file); diff --git a/libpam_internal/Makefile.am b/libpam_internal/Makefile.am index 1078cf0f..b368ebc8 100644 --- a/libpam_internal/Makefile.am +++ b/libpam_internal/Makefile.am @@ -1,10 +1,12 @@ noinst_LTLIBRARIES = libpam_internal.la -noinst_HEADERS = include/pam_line.h +noinst_HEADERS = include/pam_line.h include/pam_econf.h AM_CFLAGS = -I$(top_srcdir)/libpam_internal/include \ - -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) + -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) \ + $(ECONF_CFLAGS) libpam_internal_la_SOURCES = \ pam_debug.c \ - pam_line.c + pam_line.c \ + pam_econf.c diff --git a/libpam_internal/include/pam_econf.h b/libpam_internal/include/pam_econf.h new file mode 100644 index 00000000..ebba659d --- /dev/null +++ b/libpam_internal/include/pam_econf.h @@ -0,0 +1,22 @@ +/* pam_econf.h -- routines to parse configuration files with libeconf */ + +#ifndef PAM_ECONF_H +#define PAM_ECONF_H + +#ifdef USE_ECONF + +#include <libeconf.h> + +econf_err pam_econf_readconfig(econf_file **key_file, + const char *usr_conf_dir, + const char *etc_conf_dir, + const char *config_name, + const char *config_suffix, + const char *delim, + const char *comment, + bool (*callback)(const char *filename, const void *data), + const void *callback_data); + +#endif /* USE_ECONF */ + +#endif /* PAM_ECONF_H */ diff --git a/libpam_internal/pam_econf.c b/libpam_internal/pam_econf.c new file mode 100644 index 00000000..595c122a --- /dev/null +++ b/libpam_internal/pam_econf.c @@ -0,0 +1,34 @@ +/* pam_econf.c -- routines to parse configuration files with libeconf */ + +#include "config.h" + +#ifdef USE_ECONF + +#include <stdio.h> +#include <security/_pam_macros.h> +#include "pam_econf.h" + +econf_err pam_econf_readconfig(econf_file **key_file, + const char *usr_conf_dir, + const char *etc_conf_dir, + const char *config_name, + const char *config_suffix, + const char *delim, + const char *comment, + bool (*callback)(const char *filename, const void *data), + const void *callback_data) +{ + econf_err ret; + D(("Read configuration from directory %s and %s", etc_conf_dir, usr_conf_dir)); + ret = econf_readDirsWithCallback(key_file, + usr_conf_dir, + etc_conf_dir, + config_name, + config_suffix, + delim, + comment, + callback, callback_data); + return ret; +} + +#endif /* USE_ECONF */ diff --git a/modules/pam_env/Makefile.am b/modules/pam_env/Makefile.am index 885c9aa3..e75b3485 100644 --- a/modules/pam_env/Makefile.am +++ b/modules/pam_env/Makefile.am @@ -22,8 +22,9 @@ secureconfdir = $(SCONFIGDIR) endif AM_CFLAGS = -I$(top_srcdir)/libpam_internal/include \ - -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) \ - -DSYSCONFDIR=\"$(sysconfdir)\" $(ECONF_CFLAGS) + -I$(top_srcdir)/libpam/include \ + -I$(top_srcdir)/libpam_internal/include \ + -DSYSCONFDIR=\"$(sysconfdir)\" $(WARN_CFLAGS) $(ECONF_CFLAGS) AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map diff --git a/modules/pam_env/pam_env.c b/modules/pam_env/pam_env.c index 7c146439..1bb7b2c3 100644 --- a/modules/pam_env/pam_env.c +++ b/modules/pam_env/pam_env.c @@ -21,7 +21,7 @@ #include <sys/types.h> #include <unistd.h> #ifdef USE_ECONF -#include <libeconf.h> +#include "pam_econf.h" #endif #include <security/pam_modules.h> @@ -241,9 +241,8 @@ econf_read_file(const pam_handle_t *pamh, const char *filename, const char *deli } } - D(("Read configuration from directory %s and %s", vendor_dir, sysconf_dir)); - error = econf_readDirs (&key_file, vendor_dir, sysconf_dir, name, suffix, - delim, "#"); + error = pam_econf_readconfig (&key_file, vendor_dir, sysconf_dir, name, suffix, + delim, "#", NULL, NULL); free(vendor_dir); free(sysconf_dir); if (error != ECONF_SUCCESS) { diff --git a/modules/pam_shells/Makefile.am b/modules/pam_shells/Makefile.am index 18b44fa4..913bde6a 100644 --- a/modules/pam_shells/Makefile.am +++ b/modules/pam_shells/Makefile.am @@ -21,14 +21,18 @@ else secureconfdir = $(SCONFIGDIR) endif -AM_CFLAGS = -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) $(ECONF_CFLAGS) +AM_CFLAGS = -I$(top_srcdir)/libpam/include \ + -I$(top_srcdir)/libpam_internal/include \ + $(WARN_CFLAGS) $(ECONF_CFLAGS) AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING AM_LDFLAGS += -Wl,--version-script=$(srcdir)/../modules.map endif securelib_LTLIBRARIES = pam_shells.la -pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la $(ECONF_LIBS) +pam_shells_la_LIBADD = $(top_builddir)/libpam/libpam.la \ + $(top_builddir)/libpam_internal/libpam_internal.la \ + $(ECONF_LIBS) if ENABLE_REGENERATE_MAN dist_noinst_DATA = README diff --git a/modules/pam_shells/pam_shells.c b/modules/pam_shells/pam_shells.c index d5f8ec35..bacf4f55 100644 --- a/modules/pam_shells/pam_shells.c +++ b/modules/pam_shells/pam_shells.c @@ -19,7 +19,7 @@ #include <syslog.h> #include <unistd.h> #if defined (USE_ECONF) && defined (VENDORDIR) -#include <libeconf.h> +#include "pam_econf.h" #endif #include <security/pam_modules.h> @@ -81,17 +81,17 @@ static int perform_check(pam_handle_t *pamh) size_t size = 0; econf_err error; char **keys; - econf_file *key_file; - - error = econf_readDirsWithCallback(&key_file, - VENDORDIR, - ETCDIR, - SHELLS, - NULL, - "", /* key only */ - "#", /* comment */ - check_file, pamh); - if (error) { + econf_file *key_file = NULL; + + error = pam_econf_readconfig(&key_file, + VENDORDIR, + ETCDIR, + SHELLS, + NULL, + "", /* key only */ + "#", /* comment */ + check_file, pamh); + if (error != ECONF_SUCCESS) { pam_syslog(pamh, LOG_ERR, "Cannot parse shell files: %s", econf_errString(error)); |