[PATCH] Add support for defining missing funcitonality

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Maxin B. John" <maxin.john@xxxxxxxxx>

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@xxxxxxxxx>
Signed-off-by: Maxin B. John <maxin.john@xxxxxxxxx>
---
 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 e68d856..d4d7582 100644
--- a/configure.ac
+++ b/configure.ac
@@ -592,6 +592,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 0ab6548..84e8dd4 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.4.0

_______________________________________________
Pam-list mailing list
Pam-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/pam-list



[Index of Archives]     [Fedora Users]     [Kernel]     [Red Hat Install]     [Linux for the blind]     [Gimp]

  Powered by Linux