|
|
4218b4 |
autofs-5.1.8 - fix nfsv4 only mounts should not use rpcbind
|
|
|
4218b4 |
|
|
|
4218b4 |
From: Ian Kent <raven@themaw.net>
|
|
|
4218b4 |
|
|
|
4218b4 |
Commit 606795ecfaa1 ("autofs-5.1.7 - also require TCP_REQUESTED when
|
|
|
4218b4 |
setting NFS port" together with commit 26fb6b5408be) caused NFSv4 only
|
|
|
4218b4 |
mounts to also use rpcbind to probe availability which breaks the
|
|
|
4218b4 |
requirememt that this type of mount not use rpcbind at all.
|
|
|
4218b4 |
|
|
|
4218b4 |
Fix this by treating fstype=nfs4 mounts as a special case which doesn't
|
|
|
4218b4 |
use rpcbind.
|
|
|
4218b4 |
|
|
|
4218b4 |
Signed-off-by: Ian Kent <raven@themaw.net>
|
|
|
4218b4 |
---
|
|
|
4218b4 |
CHANGELOG | 1 +
|
|
|
4218b4 |
include/replicated.h | 2 ++
|
|
|
4218b4 |
modules/mount_nfs.c | 13 +++++++------
|
|
|
4218b4 |
modules/replicated.c | 4 ++--
|
|
|
4218b4 |
4 files changed, 12 insertions(+), 8 deletions(-)
|
|
|
4218b4 |
|
|
|
4218b4 |
--- autofs-5.1.7.orig/CHANGELOG
|
|
|
4218b4 |
+++ autofs-5.1.7/CHANGELOG
|
|
|
4218b4 |
@@ -100,6 +100,7 @@
|
|
|
4218b4 |
- refactor get_nfs_info().
|
|
|
4218b4 |
- also require TCP_REQUESTED when setting NFS port.
|
|
|
4218b4 |
- bailout on rpc systemerror.
|
|
|
4218b4 |
+- fix nfsv4 only mounts should not use rpcbind.
|
|
|
4218b4 |
|
|
|
4218b4 |
25/01/2021 autofs-5.1.7
|
|
|
4218b4 |
- make bind mounts propagation slave by default.
|
|
|
4218b4 |
--- autofs-5.1.7.orig/include/replicated.h
|
|
|
4218b4 |
+++ autofs-5.1.7/include/replicated.h
|
|
|
4218b4 |
@@ -35,6 +35,8 @@
|
|
|
4218b4 |
#define NFS3_REQUESTED NFS3_SUPPORTED
|
|
|
4218b4 |
#define NFS4_REQUESTED NFS4_SUPPORTED
|
|
|
4218b4 |
|
|
|
4218b4 |
+#define NFS4_ONLY_REQUESTED 0x0800
|
|
|
4218b4 |
+
|
|
|
4218b4 |
#define TCP_SUPPORTED 0x0001
|
|
|
4218b4 |
#define UDP_SUPPORTED 0x0002
|
|
|
4218b4 |
#define TCP_REQUESTED TCP_SUPPORTED
|
|
|
4218b4 |
--- autofs-5.1.7.orig/modules/mount_nfs.c
|
|
|
4218b4 |
+++ autofs-5.1.7/modules/mount_nfs.c
|
|
|
4218b4 |
@@ -92,7 +92,7 @@ int mount_mount(struct autofs_point *ap,
|
|
|
4218b4 |
mount_default_proto = defaults_get_mount_nfs_default_proto();
|
|
|
4218b4 |
vers = NFS_VERS_DEFAULT | NFS_PROTO_DEFAULT;
|
|
|
4218b4 |
if (strcmp(fstype, "nfs4") == 0)
|
|
|
4218b4 |
- vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED;
|
|
|
4218b4 |
+ vers = NFS4_VERS_DEFAULT | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
|
|
|
4218b4 |
else if (mount_default_proto == 4)
|
|
|
4218b4 |
vers = vers | NFS4_VERS_DEFAULT;
|
|
|
4218b4 |
|
|
|
4218b4 |
@@ -157,15 +157,16 @@ int mount_mount(struct autofs_point *ap,
|
|
|
4218b4 |
} else {
|
|
|
4218b4 |
/* Is any version of NFSv4 in the options */
|
|
|
4218b4 |
if (_strncmp("vers=4", cp, 6) == 0 ||
|
|
|
4218b4 |
- _strncmp("nfsvers=4", cp, 9) == 0)
|
|
|
4218b4 |
- vers = NFS4_VERS_MASK | TCP_SUPPORTED;
|
|
|
4218b4 |
- else if (_strncmp("vers=3", cp, o_len) == 0 ||
|
|
|
4218b4 |
+ _strncmp("nfsvers=4", cp, 9) == 0) {
|
|
|
4218b4 |
+ vers &= ~(NFS_VERS_MASK);
|
|
|
4218b4 |
+ vers |= NFS4_VERS_MASK | TCP_SUPPORTED | NFS4_ONLY_REQUESTED;
|
|
|
4218b4 |
+ } else if (_strncmp("vers=3", cp, o_len) == 0 ||
|
|
|
4218b4 |
_strncmp("nfsvers=3", cp, o_len) == 0) {
|
|
|
4218b4 |
- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
|
|
|
4218b4 |
+ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
|
|
|
4218b4 |
vers |= NFS3_REQUESTED;
|
|
|
4218b4 |
} else if (_strncmp("vers=2", cp, o_len) == 0 ||
|
|
|
4218b4 |
_strncmp("nfsvers=2", cp, o_len) == 0) {
|
|
|
4218b4 |
- vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK);
|
|
|
4218b4 |
+ vers &= ~(NFS4_VERS_MASK | NFS_VERS_MASK | NFS4_ONLY_REQUESTED);
|
|
|
4218b4 |
vers |= NFS2_REQUESTED;
|
|
|
4218b4 |
} else if (strstr(cp, "port=") == cp &&
|
|
|
4218b4 |
o_len - 5 < 25) {
|
|
|
4218b4 |
--- autofs-5.1.7.orig/modules/replicated.c
|
|
|
4218b4 |
+++ autofs-5.1.7/modules/replicated.c
|
|
|
4218b4 |
@@ -291,7 +291,7 @@ static unsigned int get_nfs_info(unsigne
|
|
|
4218b4 |
|
|
|
4218b4 |
rpc_info->proto = proto;
|
|
|
4218b4 |
if (port < 0) {
|
|
|
4218b4 |
- if ((version & NFS4_REQUESTED) && (version & TCP_REQUESTED))
|
|
|
4218b4 |
+ if (version & NFS4_REQUESTED && (version & NFS4_ONLY_REQUESTED))
|
|
|
4218b4 |
rpc_info->port = NFS_PORT;
|
|
|
4218b4 |
else
|
|
|
4218b4 |
port = 0;
|
|
|
4218b4 |
@@ -525,7 +525,7 @@ static int get_vers_and_cost(unsigned lo
|
|
|
4218b4 |
{
|
|
|
4218b4 |
struct conn_info pm_info, rpc_info;
|
|
|
4218b4 |
time_t timeout = RPC_TIMEOUT;
|
|
|
4218b4 |
- unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK);
|
|
|
4218b4 |
+ unsigned int supported, vers = (NFS_VERS_MASK | NFS4_VERS_MASK | NFS4_ONLY_REQUESTED);
|
|
|
4218b4 |
int ret = 0;
|
|
|
4218b4 |
|
|
|
4218b4 |
if (!check_address_proto(logopt, host, version))
|