diff options
Diffstat (limited to 'community/autofs/0002-musl-backport-fixes.patch')
-rw-r--r-- | community/autofs/0002-musl-backport-fixes.patch | 393 |
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 + |