aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Hrozek <jakub.hrozek@posteo.se>2015-10-15 12:14:28 +0200
committerAndreas Schneider <asn@samba.org>2015-12-10 13:31:19 +0100
commit4c249f6aa26cd75d0e4574caa1f398b09303d5fb (patch)
tree29cd6aa8e5b5d7ccdc5ee858b924355fcc62802e
parent2a99ac169fb75f4a15eb8d5f03a94382053eeb1e (diff)
downloadpam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.tar.gz
pam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.tar.xz
pam_wrapper-4c249f6aa26cd75d0e4574caa1f398b09303d5fb.zip
Use find_library to find libpam.0
-rw-r--r--ConfigureChecks.cmake4
-rw-r--r--config.h.cmake1
-rw-r--r--src/pam_wrapper.c37
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);