diff options
author | Jakub Hrozek <jakub.hrozek@posteo.se> | 2015-10-15 12:14:28 +0200 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2015-12-10 13:31:19 +0100 |
commit | 4c249f6aa26cd75d0e4574caa1f398b09303d5fb (patch) | |
tree | 29cd6aa8e5b5d7ccdc5ee858b924355fcc62802e | |
parent | 2a99ac169fb75f4a15eb8d5f03a94382053eeb1e (diff) | |
download | pam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.tar.gz pam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.tar.xz pam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.zip |
Use find_library to find libpam.0
-rw-r--r-- | ConfigureChecks.cmake | 4 | ||||
-rw-r--r-- | config.h.cmake | 1 | ||||
-rw-r--r-- | src/pam_wrapper.c | 37 |
3 files changed, 26 insertions, 16 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index f9a2f54..e26494f 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -44,6 +44,10 @@ check_function_exists(strncpy HAVE_STRNCPY) check_function_exists(vsnprintf HAVE_VSNPRINTF) check_function_exists(snprintf HAVE_SNPRINTF) +# FUNCTIONS +find_library(PAM_LIBRARY NAMES libpam.so.0 pam) +set(PAM_LIBRARY ${PAM_LIBRARY}) + # OPTIONS if (LINUX) diff --git a/config.h.cmake b/config.h.cmake index 462347e..921fbbe 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -24,6 +24,7 @@ #cmakedefine HAVE_SETEUID 1 /*************************** LIBRARIES ***************************/ +#cmakedefine PAM_LIBRARY "${PAM_LIBRARY}" /**************************** OPTIONS ****************************/ diff --git a/src/pam_wrapper.c b/src/pam_wrapper.c index 9a5595b..1ec4d54 100644 --- a/src/pam_wrapper.c +++ b/src/pam_wrapper.c @@ -31,6 +31,7 @@ #include <fcntl.h> #include <unistd.h> #include <dlfcn.h> +#include <libgen.h> #include <ftw.h> @@ -143,7 +144,7 @@ static void pwrap_log(enum pwrap_dbglvl_e dbglvl, * LIBC *****************/ -#define LIBPAM_NAME "libpam.so" +#define LIBPAM_NAME "libpam.so.0" typedef int (*__libpam_pam_start)(const char *service_name, const char *user, @@ -276,8 +277,8 @@ static void *pwrap_load_lib_handle(enum pwrap_lib lib) snprintf(libpam_path, sizeof(libpam_path), - "%s/libpam.so", - pwrap.config_dir); + "%s/%s", + pwrap.config_dir, LIBPAM_NAME); handle = dlopen(libpam_path, flags); if (handle != NULL) { @@ -652,7 +653,6 @@ static void pwrap_init(void) const char *env; uint32_t i; int rc; - const char *suffix = ""; char pam_library[128] = { 0 }; char pam_path[1024] = { 0 }; ssize_t ret; @@ -725,16 +725,8 @@ static void pwrap_init(void) exit(1); } - /* copy libpam.so */ - if (sizeof(void *) == 8) { - suffix = "64"; - } - - snprintf(pam_path, - sizeof(pam_path), - "/usr/lib%s/%s", - suffix, - LIBPAM_NAME); + /* copy libpam.so.0 */ + snprintf(pam_path, sizeof(pam_path), "%s", PAM_LIBRARY); PWRAP_LOG(PWRAP_LOG_TRACE, "PAM path: %s", pam_path); @@ -754,12 +746,25 @@ static void pwrap_init(void) "%s", pam_library); } else { + char pam_path_cp[sizeof(pam_path)]; + char *dname; + + strncpy(pam_path_cp, pam_path, sizeof(pam_path_cp)); + + dname = dirname(pam_path_cp); + if (dname == NULL) { + PWRAP_LOG(PWRAP_LOG_ERROR, + "No directory component in %s", pam_path); + exit(1); + } + snprintf(pam_path, sizeof(pam_path), - "/usr/lib%s/%s", - suffix, + "%s/%s", + dname, pam_library); } + PWRAP_LOG(PWRAP_LOG_TRACE, "Reconstructed PAM path: %s", pam_path); PWRAP_LOG(PWRAP_LOG_DEBUG, "Copy %s to %s", pam_path, pwrap.pam_library); rc = p_copy(pam_path, pwrap.pam_library, pwrap.config_dir, 0644); |