| From 45d1ed58927593968faead7dbb295f3922f41a2f Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Sat, 8 Aug 2015 14:16:43 -0700 |
| Subject: [PATCH] Add support for defining missing funcitonality |
| |
| In order to support alternative libc on linux ( musl, bioninc ) etc we |
| need to check for glibc-only features and provide alternatives, in this |
| list strndupa is first one, when configure detects that its not included |
| in system C library then the altrnative implementation from missing.h is |
| used |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| Upstream-Status: Pending |
| |
| configure.ac | 3 +++ |
| libpam/include/missing.h | 12 ++++++++++++ |
| modules/pam_exec/pam_exec.c | 1 + |
| 3 files changed, 16 insertions(+) |
| create mode 100644 libpam/include/missing.h |
| |
| diff --git a/configure.ac b/configure.ac |
| index 9e1257f..cbed979 100644 |
| --- a/configure.ac |
| +++ b/configure.ac |
| @@ -599,6 +599,9 @@ dnl |
| AC_CHECK_DECL(__NR_keyctl, [have_key_syscalls=1],[have_key_syscalls=0],[#include <sys/syscall.h>]) |
| AC_CHECK_DECL(ENOKEY, [have_key_errors=1],[have_key_errors=0],[#include <errno.h>]) |
| |
| +# musl and bionic don't have strndupa |
| +AC_CHECK_DECLS_ONCE([strndupa]) |
| + |
| HAVE_KEY_MANAGEMENT=0 |
| if test $have_key_syscalls$have_key_errors = 11 |
| then |
| diff --git a/libpam/include/missing.h b/libpam/include/missing.h |
| new file mode 100644 |
| index 0000000..3cf011c |
| --- /dev/null |
| +++ b/libpam/include/missing.h |
| @@ -0,0 +1,12 @@ |
| +#pragma once |
| + |
| +#if !HAVE_DECL_STRNDUPA |
| +#define strndupa(s, n) \ |
| + ({ \ |
| + const char *__old = (s); \ |
| + size_t __len = strnlen(__old, (n)); \ |
| + char *__new = alloca(__len + 1); \ |
| + __new[__len] = '\0'; \ |
| + memcpy(__new, __old, __len); \ |
| + }) |
| +#endif |
| diff --git a/modules/pam_exec/pam_exec.c b/modules/pam_exec/pam_exec.c |
| index 17ba6ca..3aa2694 100644 |
| --- a/modules/pam_exec/pam_exec.c |
| +++ b/modules/pam_exec/pam_exec.c |
| @@ -59,6 +59,7 @@ |
| #include <security/pam_modutil.h> |
| #include <security/pam_ext.h> |
| #include <security/_pam_macros.h> |
| +#include <missing.h> |
| |
| #define ENV_ITEM(n) { (n), #n } |
| static struct { |
| -- |
| 2.1.4 |
| |