1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-22 10:45:15 +03:00
aports/community/autofs/0002-musl-backport-fixes.patch
Clayton Craft fbe5ed46a7 community/autofs: upgrade to 5.1.8
The previous patches have been dropped due to being already
implemented/merged in the new version. A number of patches fixing
musl compilation issues are included. They're merged upstream but not
yet in a release.
2022-05-11 16:54:03 +00:00

393 lines
11 KiB
Diff

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