mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-10 06:57:08 -08:00
net-fs/autofs: make it compatible with sys-libs/musl
Add patches to support alternative C lib: sys-libs/musl, most pathes borrow and rework from alpinelinux [1] Thanks Sam James (sec padawan) for helping on this. [1] https://git.alpinelinux.org/aports/tree/testing/autofs/ Closes: https://bugs.gentoo.org/716660 Package-Manager: Portage-2.3.100, Repoman-2.3.22 Signed-off-by: Yixun Lan <dlan@gentoo.org>
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# Copyright 1999-2020 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=7
|
||||
|
||||
inherit linux-info systemd toolchain-funcs
|
||||
|
||||
DESCRIPTION="Kernel based automounter"
|
||||
HOMEPAGE="https://web.archive.org/web/*/http://www.linux-consulting.com/Amd_AutoFS/autofs.html"
|
||||
SRC_URI="https://www.kernel.org/pub/linux/daemons/${PN}/v5/${P}.tar.xz"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86"
|
||||
IUSE="-dmalloc ldap +libtirpc mount-locking sasl systemd"
|
||||
|
||||
# currently, sasl code assumes the presence of kerberosV
|
||||
RDEPEND=">=sys-apps/util-linux-2.20
|
||||
dmalloc? ( dev-libs/dmalloc[threads] )
|
||||
ldap? ( >=net-nds/openldap-2.0
|
||||
sasl? (
|
||||
dev-libs/cyrus-sasl
|
||||
dev-libs/libxml2
|
||||
virtual/krb5
|
||||
)
|
||||
)
|
||||
systemd? ( sys-apps/systemd )
|
||||
libtirpc? ( net-libs/libtirpc )
|
||||
!libtirpc? ( elibc_glibc? ( sys-libs/glibc[rpc(-)] ) )
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
libtirpc? ( net-libs/rpcsvc-proto )
|
||||
"
|
||||
BDEPEND="
|
||||
sys-devel/flex
|
||||
virtual/yacc
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/${P}-glibc.patch"
|
||||
"${FILESDIR}/${P}-pid.patch"
|
||||
)
|
||||
|
||||
pkg_setup() {
|
||||
linux-info_pkg_setup
|
||||
|
||||
local CONFIG_CHECK
|
||||
|
||||
if kernel_is -ge 4 18; then
|
||||
CONFIG_CHECK="~AUTOFS_FS"
|
||||
else
|
||||
CONFIG_CHECK="~AUTOFS4_FS"
|
||||
fi
|
||||
|
||||
check_extra_config
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
sed -i -e "s:/usr/bin/kill:/bin/kill:" samples/autofs.service.in || die # bug #479492
|
||||
sed -i -e "/^EnvironmentFile/d" samples/autofs.service.in || die # bug #592334
|
||||
|
||||
# Install samples including autofs.service
|
||||
sed -i -e "/^SUBDIRS/s/$/ samples/g" Makefile.rules || die
|
||||
|
||||
default
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# bug #483716
|
||||
tc-export AR
|
||||
# --with-confdir is for bug #361481
|
||||
# --with-mapdir is for bug #385113
|
||||
local myeconfargs=(
|
||||
--with-confdir=/etc/conf.d
|
||||
--with-mapdir=/etc/autofs
|
||||
$(use_with dmalloc)
|
||||
$(use_with ldap openldap)
|
||||
$(use_with libtirpc)
|
||||
$(use_with sasl)
|
||||
$(use_enable mount-locking)
|
||||
$(use_with systemd systemd $(systemd_get_systemunitdir)) # bug #479492
|
||||
--without-hesiod
|
||||
--disable-ext-env
|
||||
--enable-sloppy-mount # bug #453778
|
||||
--enable-force-shutdown
|
||||
--enable-ignore-busy
|
||||
RANLIB="$(type -P $(tc-getRANLIB))" # bug #483716
|
||||
)
|
||||
econf "${myeconfargs[@]}"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
default
|
||||
rmdir "${D}"/run
|
||||
|
||||
if kernel_is -lt 2 6 30; then
|
||||
# kernel patches
|
||||
docinto patches
|
||||
dodoc patches/${PN}4-2.6.??{,.?{,?}}-v5-update-????????.patch
|
||||
fi
|
||||
newinitd "${FILESDIR}"/autofs5.initd autofs
|
||||
insinto etc/autofs
|
||||
newins "${FILESDIR}"/autofs5-auto.master auto.master
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
if kernel_is -lt 2 6 30; then
|
||||
elog "This version of ${PN} requires a kernel with autofs4 supporting"
|
||||
elog "protocol version 5.00. Patches for kernels older than 2.6.30 have"
|
||||
elog "been installed into"
|
||||
elog "${EROOT}/usr/share/doc/${P}/patches."
|
||||
elog "For further instructions how to patch the kernel, please refer to"
|
||||
elog "${EROOT}/usr/share/doc/${P}/INSTALL."
|
||||
elog
|
||||
fi
|
||||
elog "If you plan on using autofs for automounting remote NFS mounts,"
|
||||
elog "please check that both portmap (or rpcbind) and rpc.statd/lockd"
|
||||
elog "are running."
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
diff --git a/daemon/lookup.c b/daemon/lookup.c
|
||||
index 60a48f3..bbd65e0 100644
|
||||
--- a/daemon/lookup.c
|
||||
+++ b/daemon/lookup.c
|
||||
@@ -382,7 +382,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source
|
||||
if (!S_ISREG(st.st_mode))
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
|
||||
- if (st.st_mode & __S_IEXEC)
|
||||
+ if (st.st_mode & S_IEXEC)
|
||||
type = src_prog;
|
||||
else
|
||||
type = src_file;
|
||||
@@ -937,7 +937,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_
|
||||
if (!S_ISREG(st.st_mode))
|
||||
return NSS_STATUS_NOTFOUND;
|
||||
|
||||
- if (st.st_mode & __S_IEXEC)
|
||||
+ if (st.st_mode & S_IEXEC)
|
||||
type = src_prog;
|
||||
else
|
||||
type = src_file;
|
||||
@@ -1113,7 +1113,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 4fd0ba9..7b855a7 100644
|
||||
--- a/include/automount.h
|
||||
+++ b/include/automount.h
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <limits.h>
|
||||
#include <time.h>
|
||||
#include <syslog.h>
|
||||
+#include <sys/procfs.h>
|
||||
#include <sys/types.h>
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
@@ -142,6 +143,16 @@ struct autofs_point;
|
||||
#define UMOUNT_RETRIES 8
|
||||
#define EXPIRE_RETRIES 3
|
||||
|
||||
+#ifndef __SWORD_TYPE
|
||||
+#if __WORDSIZE == 32
|
||||
+# define __SWORD_TYPE int
|
||||
+#elif __WORDSIZE == 64
|
||||
+# define __SWORD_TYPE long int
|
||||
+#else
|
||||
+#error
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
static u_int32_t inline hash(const char *key, unsigned int size)
|
||||
{
|
||||
u_int32_t hashval;
|
||||
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/include/rpc_subs.h b/include/rpc_subs.h
|
||||
index 6e35eed..7ba4b93 100644
|
||||
--- a/include/rpc_subs.h
|
||||
+++ b/include/rpc_subs.h
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include <rpc/rpc.h>
|
||||
#include <rpc/pmap_prot.h>
|
||||
-#include <nfs/nfs.h>
|
||||
+#include <linux/nfs.h>
|
||||
#include <linux/nfs2.h>
|
||||
#include <linux/nfs3.h>
|
||||
|
||||
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;
|
||||
@@ -0,0 +1,14 @@
|
||||
diff --git a/include/log.h b/include/log.h
|
||||
index 69eed96..14051cc 100644
|
||||
--- a/include/log.h
|
||||
+++ b/include/log.h
|
||||
@@ -46,6 +46,8 @@ extern void log_crit(unsigned, const char* msg, ...);
|
||||
extern void log_debug(unsigned int, const char* msg, ...);
|
||||
extern void logmsg(const char* msg, ...);
|
||||
|
||||
+#include <unistd.h> /* Required for pid_t */
|
||||
+
|
||||
extern pid_t log_pidinfo(struct autofs_point *ap, pid_t pid, char *label);
|
||||
|
||||
#define debug(opt, msg, args...) \
|
||||
|
||||
Reference in New Issue
Block a user