aboutsummaryrefslogtreecommitdiffstats
path: root/community/autofs/0002-musl-backport-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/autofs/0002-musl-backport-fixes.patch')
-rw-r--r--community/autofs/0002-musl-backport-fixes.patch393
1 files changed, 393 insertions, 0 deletions
diff --git a/community/autofs/0002-musl-backport-fixes.patch b/community/autofs/0002-musl-backport-fixes.patch
new file mode 100644
index 00000000000..e15678c1622
--- /dev/null
+++ b/community/autofs/0002-musl-backport-fixes.patch
@@ -0,0 +1,393 @@
+From f5f4eae173cfa61b3665e327d828f203fa6d72f3 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Fri, 24 Dec 2021 22:02:20 +0800
+Subject: [PATCH 2/2] autofs-5.1.8 - fix bashism in configure
+
+configure scripts need to work with a POSIX-compliant shell,
+so let's not use a bashism here.
+
+```
+checking for res_query in -lresolv... yes
+checking for libhesiod... no
+./configure: 4880: test: 0: unexpected operator
+checking how to run the C preprocessor... gcc -E
+```
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - fix missing include in hash.h
+
+Fixes a build failure with the musl libc:
+```
+../include/hash.h:74:8: error: unknown type name '__always_inline'
+ 74 | static __always_inline uint32_t hash_64(uint64_t val, unsigned int bits)
+ | ^~~~~~~~~~~~~~~
+```
+
+We need to include stddef.h from linux-headers to ensure _always_inline
+is always defined.
+
+Bug: https://bugs.gentoo.org/828918
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - define fallback dummy NSS config path
+
+On musl, _PATH_NSSWITCH_CONF won't be defined (it doesn't support NSS),
+so let's give it a dummy path when it's not defined by glibc.
+
+Fixes build failures like:
+```
+../include/nsswitch.h:27:23: error: '_PATH_NSSWITCH_CONF' undeclared (first use in this function)
+ 27 | #define NSSWITCH_FILE _PATH_NSSWITCH_CONF
+ | ^~~~~~~~~~~~~~~~~~~
+```
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - avoid internal stat.h definitions
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - add missing include to hash.h for _WORDSIZE
+
+Fixes build failure on musl like:
+```
+../include/hash.h:22:2: error: #error Wordsize not 32 or 64
+ 22 | #error Wordsize not 32 or 64
+ | ^~~~~
+```
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - add missing include to log.h for pid_t
+
+Fixes build failures on musl like:
+```
+../include/log.h:49:8: error: unknown type name 'pid_t'
+ 49 | extern pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label);
+ | ^~~~~
+../include/log.h:49:51: error: unknown type name 'pid_t'; did you mean 'gid_t'?
+ 49 | extern pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label);
+ | ^~~~~
+ | gid_t
+```
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - define _SWORD_TYPE for musl
+
+Copy the definition from glibc. Fixes build failures like:
+```
+automount.c:280:35: error: '__SWORD_TYPE' undeclared (first use in this function)
+ 280 | if (fs.f_type != (__SWORD_TYPE) AUTOFS_SUPER_MAGIC) {
+ | ^~~~~~~~~~~~
+automount.c:280:35: note: each undeclared identifier is reported only once for each function it appears in
+automount.c:280:48: error: expected ')' before numeric constant
+ 280 | if (fs.f_type != (__SWORD_TYPE) AUTOFS_SUPER_MAGIC) {
+ | ~ ^
+ | )
+```
+
+Tested-by: Yixun Lan <dlan@gentoo.org>
+Signed-off-by: Sam James <sam@gentoo.org>
+
+autofs-5.1.8 - add autofs_strerror_r() helper for musl
+
+If using musl libc the XSI-compliant variant strerror_r() which returns
+an integer instead of a pointer so add a helper function to handle this
+case.
+
+Signed-off-by: Fabian Groffen <grobian@gentoo.org>
+Signed-off-by: Ian Kent <raven@themaw.net>
+
+autofs-5.1.8 - handle innetgr() not present in musl
+
+The function innetgr(3) may not be present in musl libc, add a check
+for this.
+
+Originally contributed by Fabian, modified by me.
+
+Signed-off-by: Fabian Groffen <grobian@gentoo.org>
+Signed-off-by: Ian Kent <raven@themaw.net>
+---
+ configure | 9 +++++----
+ configure.in | 8 ++++----
+ daemon/automount.c | 10 ++++++++++
+ daemon/lookup.c | 6 +++---
+ include/automount.h | 5 +++++
+ include/config.h.in | 3 +++
+ include/hash.h | 6 ++++++
+ include/log.h | 2 ++
+ include/nsswitch.h | 4 ++++
+ lib/log.c | 10 ++++++++++
+ modules/lookup_multi.c | 4 ++--
+ modules/parse_amd.c | 7 +++++++
+ 12 files changed, 61 insertions(+), 13 deletions(-)
+
+diff --git a/configure b/configure
+index 394a8d5..33446b0 100755
+--- a/configure
++++ b/configure
+@@ -4227,12 +4227,13 @@ fi
+
+
+
+-for ac_func in pipe2
++for ac_func in pipe2 innetgr
+ do :
+- ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2"
+-if test "x$ac_cv_func_pipe2" = xyes; then :
++ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
++ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
++if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+-#define HAVE_PIPE2 1
++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+ _ACEOF
+
+ fi
+diff --git a/configure.in b/configure.in
+index 750ffb4..68cbd44 100644
+--- a/configure.in
++++ b/configure.in
+@@ -169,7 +169,7 @@ AF_CHECK_SSS_LIB(SSS_AUTOFS, libsss_autofs.so)
+ AC_SUBST(HAVE_SSS_AUTOFS)
+ AC_SUBST(sssldir)
+
+-AC_CHECK_FUNCS(pipe2)
++AC_CHECK_FUNCS(pipe2 innetgr)
+
+ #
+ # Newer mounts have the -s (sloppy) option to ignore unknown options,
+@@ -262,7 +262,7 @@ if test -z "$HAVE_HESIOD" -o "$HAVE_HESIOD" != "0"
+ then
+ HAVE_HESIOD=0
+ AF_CHECK_LIBHESIOD()
+- if test "$HAVE_HESIOD" == "1"; then
++ if test "$HAVE_HESIOD" = "1"; then
+ AC_DEFINE(WITH_HESIOD,1,
+ [Define if using Hesiod as a source of automount maps])
+ fi
+@@ -337,11 +337,11 @@ AC_ARG_WITH(sasl,
+ SASL_FLAGS="-I${withval}/include"
+ fi
+ )
+-if test -z "$HAVE_SASL" -o "$HAVE_SASL" != "0" -a "$HAVE_LIBXML" == "1"
++if test -z "$HAVE_SASL" -o "$HAVE_SASL" != "0" -a "$HAVE_LIBXML" = "1"
+ then
+ HAVE_SASL=0
+ AC_CHECK_LIB(sasl2, sasl_client_start, HAVE_SASL=1 LIBSASL="$LIBSASL -lsasl2", , -lsasl2 $LIBS)
+- if test "$HAVE_SASL" == "1"; then
++ if test "$HAVE_SASL" = "1"; then
+ AC_DEFINE(WITH_SASL,1,
+ [Define if using SASL authentication with the LDAP module])
+ fi
+diff --git a/daemon/automount.c b/daemon/automount.c
+index cc28689..5dffce0 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -48,6 +48,16 @@
+ #endif
+ #endif
+
++#ifndef __SWORD_TYPE
++#if __WORDSIZE == 32
++# define __SWORD_TYPE int
++#elif __WORDSIZE == 64
++# define __SWORD_TYPE long int
++#else
++#error
++#endif
++#endif
++
+ const char *program; /* Initialized with argv[0] */
+ const char *version = VERSION_STRING; /* Program version */
+ const char *libdir = AUTOFS_LIB_DIR; /* Location of library modules */
+diff --git a/daemon/lookup.c b/daemon/lookup.c
+index 0b281f8..4a286d6 100644
+--- a/daemon/lookup.c
++++ b/daemon/lookup.c
+@@ -397,7 +397,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source
+ return NSS_STATUS_NOTFOUND;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+@@ -930,7 +930,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_
+ return NSS_STATUS_NOTFOUND;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+@@ -1077,7 +1077,7 @@ static struct map_source *lookup_get_map_source(struct master_mapent *entry)
+ if (!S_ISREG(st.st_mode))
+ return NULL;
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = "program";
+ else
+ type = "file";
+diff --git a/include/automount.h b/include/automount.h
+index 947ed16..d2d05d8 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -43,6 +43,11 @@
+
+ #define ENABLE_CORES 1
+
++#ifndef __GLIBC__
++# define strerror_r(N,B,S) autofs_strerror_r(N,B,S)
++char *autofs_strerror_r(int errnum, char *buf, size_t buflen); /* GNU */
++#endif
++
+ /* We MUST have the paths to mount(8) and umount(8) */
+ #ifndef HAVE_MOUNT
+ #error Failed to locate mount(8)!
+diff --git a/include/config.h.in b/include/config.h.in
+index 4e36b39..4f8daa8 100644
+--- a/include/config.h.in
++++ b/include/config.h.in
+@@ -30,6 +30,9 @@
+ /* Define to 1 if you have the `getservbyname' function. */
+ #undef HAVE_GETSERVBYNAME
+
++/* Define to 1 if you have the `innetgr' function. */
++#undef HAVE_INNETGR
++
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+
+diff --git a/include/hash.h b/include/hash.h
+index 2447f29..0f1d7b5 100644
+--- a/include/hash.h
++++ b/include/hash.h
+@@ -3,6 +3,12 @@
+ /* Fast hashing routine for ints, longs and pointers.
+ (C) 2002 Nadia Yvette Chambers, IBM */
+
++#ifdef __GLIBC__
++#include <bits/wordsize.h>
++#else
++#include <bits/reg.h>
++#endif
++#include <linux/stddef.h>
+ #include <sys/types.h>
+ #include <stdint.h>
+
+diff --git a/include/log.h b/include/log.h
+index 69eed96..a7b09f9 100644
+--- a/include/log.h
++++ b/include/log.h
+@@ -17,6 +17,8 @@
+ #ifndef LOG_H
+ #define LOG_H
+
++#include <unistd.h>
++
+ /* Define logging functions */
+
+ #define LOGOPT_NONE 0x0000
+diff --git a/include/nsswitch.h b/include/nsswitch.h
+index d3e4027..8376113 100644
+--- a/include/nsswitch.h
++++ b/include/nsswitch.h
+@@ -24,6 +24,10 @@
+ #include <netdb.h>
+ #include "list.h"
+
++#ifndef _PATH_NSSWITCH_CONF
++#define _PATH_NSSWITCH_CONF "/dev/null"
++#endif
++
+ #define NSSWITCH_FILE _PATH_NSSWITCH_CONF
+
+ enum nsswitch_status {
+diff --git a/lib/log.c b/lib/log.c
+index 0cb47d7..aa4a180 100644
+--- a/lib/log.c
++++ b/lib/log.c
+@@ -364,3 +364,13 @@ pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label) {
+
+ return ppid;
+ }
++
++#ifndef __GLIBC__
++# undef strerror_r
++char *autofs_strerror_r(int errnum, char *buf, size_t buflen) {
++ int s = strerror_r(errnum, buf, buflen);
++ if (s)
++ return NULL;
++ return buf;
++}
++#endif
+diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c
+index fadd2ea..cf109de 100644
+--- a/modules/lookup_multi.c
++++ b/modules/lookup_multi.c
+@@ -247,7 +247,7 @@ static struct lookup_mod *nss_open_lookup(const char *format, int argc, const ch
+ continue;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+@@ -452,7 +452,7 @@ int lookup_reinit(const char *my_mapfmt,
+ continue;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+diff --git a/modules/parse_amd.c b/modules/parse_amd.c
+index 163174c..5090060 100644
+--- a/modules/parse_amd.c
++++ b/modules/parse_amd.c
+@@ -425,6 +425,7 @@ static int sel_in_network(struct autofs_point *ap,
+ return ret;
+ }
+
++#ifdef HAVE_INNETGR
+ static int sel_netgrp(struct autofs_point *ap,
+ struct selector *s, struct substvar *sv)
+ {
+@@ -489,6 +490,7 @@ out:
+
+ return ret;
+ }
++#endif
+
+ static int eval_selector(struct autofs_point *ap,
+ struct amd_entry *this, struct substvar *sv)
+@@ -628,7 +630,12 @@ static int eval_selector(struct autofs_point *ap,
+ switch (s->sel->selector) {
+ case SEL_NETGRP:
+ case SEL_NETGRPD:
++#ifndef HAVE_INNETGR
++ error(logopt, MODPREFIX
++ "netgroups not available, function innetgr(3) not available");
++#else
+ ret = sel_netgrp(ap, s, sv);
++#endif
+ break;
+
+ default:
+--
+2.36.1
+