Blame SOURCES/autofs-5.1.8-fix-nfsv4-only-mounts-should-not-use-rpcbind.patch

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))