95 lines
3.5 KiB
Diff
95 lines
3.5 KiB
Diff
|
autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind
|
||
|
|
||
|
From: Ian Kent <raven@themaw.net>
|
||
|
|
||
|
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.
|
||
|
|
||
|
Signed-off-by: Ian Kent <raven@themaw.net>
|
||
|
---
|
||
|
CHANGELOG | 1 +
|
||
|
include/replicated.h | 2 ++
|
||
|
modules/mount_nfs.c | 13 +++++++------
|
||
|
modules/replicated.c | 4 ++--
|
||
|
4 files changed, 12 insertions(+), 8 deletions(-)
|
||
|
|
||
|
--- autofs-5.1.7.orig/CHANGELOG
|
||
|
+++ autofs-5.1.7/CHANGELOG
|
||
|
@@ -100,6 +100,7 @@
|
||
|
- refactor get_nfs_info().
|
||
|
- also require TCP_REQUESTED when setting NFS port.
|
||
|
- bailout on rpc systemerror.
|
||
|
+- fix nfsv4 only mounts should not use rpcbind.
|
||
|
|
||
|
25/01/2021 autofs-5.1.7
|
||
|
- make bind mounts propagation slave by default.
|
||
|
--- autofs-5.1.7.orig/include/replicated.h
|
||
|
+++ autofs-5.1.7/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
|
||
|
--- autofs-5.1.7.orig/modules/mount_nfs.c
|
||
|
+++ autofs-5.1.7/modules/mount_nfs.c
|
||
|
@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap,
|
||
|
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,
|
||
|
} 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) {
|
||
|
--- autofs-5.1.7.orig/modules/replicated.c
|
||
|
+++ autofs-5.1.7/modules/replicated.c
|
||
|
@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigne
|
||
|
|
||
|
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 lo
|
||
|
{
|
||
|
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))
|