summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYixun Lan <dlan@gentoo.org>2021-12-22 21:15:58 +0800
committerYixun Lan <dlan@gentoo.org>2021-12-22 21:17:52 +0800
commitf7586f437afc004fee03a1fdf586d6dd9b7db480 (patch)
tree648706a00fdccb4d73643110db6b6731cb6aeac4 /net-fs/autofs
parentwww-apps/owncloud: 10.9.0 bump (diff)
downloadgentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.tar.gz
gentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.tar.bz2
gentoo-f7586f437afc004fee03a1fdf586d6dd9b7db480.zip
net-fs/autofs: fix nfsv4 mount issue
Closes: https://bugs.gentoo.org/827239 Package-Manager: Portage-3.0.28, Repoman-3.0.3 Signed-off-by: Yixun Lan <dlan@gentoo.org>
Diffstat (limited to 'net-fs/autofs')
-rw-r--r--net-fs/autofs/autofs-5.1.8-r1.ebuild (renamed from net-fs/autofs/autofs-5.1.8.ebuild)1
-rw-r--r--net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch88
2 files changed, 89 insertions, 0 deletions
diff --git a/net-fs/autofs/autofs-5.1.8.ebuild b/net-fs/autofs/autofs-5.1.8-r1.ebuild
index 3c519f852c70..d8aa892b214a 100644
--- a/net-fs/autofs/autofs-5.1.8.ebuild
+++ b/net-fs/autofs/autofs-5.1.8-r1.ebuild
@@ -45,6 +45,7 @@ PATCHES=(
"${FILESDIR}/${PN}-5.1.6-pid.patch"
"${FILESDIR}/${PN}-5.1.6-pid.patch"
"${FILESDIR}/${P}-dmalloc.patch"
+ "${FILESDIR}/${P}-nfsv4-mount.patch"
)
pkg_setup() {
diff --git a/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch
new file mode 100644
index 000000000000..eb1bc6cb4241
--- /dev/null
+++ b/net-fs/autofs/files/autofs-5.1.8-nfsv4-mount.patch
@@ -0,0 +1,88 @@
+autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind
+
+From: Ian Kent <raven@xxxxxxxxxx>
+
+Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when
+setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only
+mounts to also use rpcbind to probe availability which breaks the
+requirememt that this type of mount not use rpcbind at all.
+
+Fix this by treating fstype=nfs4 mounts as a special case which doesn't
+use rpcbind.
+---
+ CHANGELOG | 1 +
+ include/replicated.h | 2 ++
+ modules/mount_nfs.c | 13 +++++++------
+ modules/replicated.c | 4 ++--
+ 4 files changed, 12 insertions(+), 8 deletions(-)
+
+diff --git a/include/replicated.h b/include/replicated.h
+index 95ff1f0d..f889a56a 100644
+--- a/include/replicated.h
++++ b/include/replicated.h
+@@ -35,6 +35,8 @@
+ #define NFS3_REQUESTED NFS3_SUPPORTED
+ #define NFS4_REQUESTED NFS4_SUPPORTED
+
++#define NFS4_ONLY_REQUESTED 0x0800
++
+ #define TCP_SUPPORTED 0x0001
+ #define UDP_SUPPORTED 0x0002
+ #define TCP_REQUESTED TCP_SUPPORTED
+diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
+index 0ab87dcf..feb5afcd 100644
+--- a/modules/mount_nfs.c
++++ b/modules/mount_nfs.c
+@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ mount_default_proto = defaults_get_mount_nfs_default_proto();
+ vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT;
+ if (strcmp(fstype, "nfs4") == 0)
+- vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED;
++ vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
+ else if (mount_default_proto == 4)
+ vers = vers | NFS4_VERS_DEFAULT;
+
+@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ } else {
+ /* Is any version of NFSv4 in the options */
+ if (_strncmp("vers=4", cp, 6) == 0 ||
+- _strncmp("nfsvers=4", cp, 9) == 0)
+- vers = NFS4_VERS_MASK | TCP_SUPPORTED;
+- else if (_strncmp("vers=3", cp, o_len) == 0 ||
++ _strncmp("nfsvers=4", cp, 9) == 0) {
++ vers &= ~(NFS_VERS_MASK);
++ vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
++ } else if (_strncmp("vers=3", cp, o_len) == 0 ||
+ _strncmp("nfsvers=3", cp, o_len) == 0) {
+- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
+ vers |= NFS3_REQUESTED;
+ } else if (_strncmp("vers=2", cp, o_len) == 0 ||
+ _strncmp("nfsvers=2", cp, o_len) == 0) {
+- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
++ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
+ vers |= NFS2_REQUESTED;
+ } else if (strstr(cp, "port=") == cp &&
+ o_len - 5 < 25) {
+diff --git a/modules/replicated.c b/modules/replicated.c
+index 09075dd0..cdb7c617 100644
+--- a/modules/replicated.c
++++ b/modules/replicated.c
+@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigned logopt, struct host *host,
+
+ rpc_info->proto = proto;
+ if (port < 0) {
+- if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED))
++ if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED))
+ rpc_info->port = NFS_PORT;
+ else
+ port = 0;
+@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned logopt, struct host *host,
+ {
+ struct conn_info pm_info, rpc_info;
+ time_t timeout = RPC_TIMEOUT;
+- unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK);
++ unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED);
+ int ret = 0;
+
+ if (!check_address_proto(logopt, host, version))