Blob Blame History Raw
mount.nfs: Do not send pmap inquire when port is specified

When the port is specified on the command line do not
send a pmap inquire asking for the port. Instead use
the given port in the NFS ping. If the ping fails,
assume a bad port was given and now go ask the server
for the correct port.

Signed-off-by: Steve Dickson <steved@redhat.com>

diff --git a/utils/mount/network.c b/utils/mount/network.c
index d1f91dc..405c320 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -545,17 +545,18 @@ static int nfs_probe_port(const struct sockaddr *sap, const socklen_t salen,
 	const unsigned int prot = (u_int)pmap->pm_prot, *p_prot;
 	const u_short port = (u_short) pmap->pm_port;
 	unsigned long vers = pmap->pm_vers;
-	unsigned short p_port;
+	unsigned short p_port = port;
+	int once = 1;
 
 	memcpy(saddr, sap, salen);
 	p_prot = prot ? &prot : protos;
 	p_vers = vers ? &vers : versions;
-
 	for (;;) {
 		if (verbose)
 			printf(_("%s: prog %lu, trying vers=%lu, prot=%u\n"),
 				progname, prog, *p_vers, *p_prot);
-		p_port = nfs_getport(saddr, salen, prog, *p_vers, *p_prot);
+		if (!p_port)
+			p_port = nfs_getport(saddr, salen, prog, *p_vers, *p_prot);
 		if (p_port) {
 			if (!port || port == p_port) {
 				nfs_set_port(saddr, p_port);
@@ -564,6 +565,15 @@ static int nfs_probe_port(const struct sockaddr *sap, const socklen_t salen,
 				if (nfs_rpc_ping(saddr, salen, prog,
 							*p_vers, *p_prot, NULL))
 					goto out_ok;
+				if (port == p_port && once) {
+					/*
+					 * Could be a bad port was specified. This
+					 * time ask the server for the port but only
+					 * do it once.
+					 */
+					p_port = once = 0;
+					continue;
+				}
 			} else
 				rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED;
 		}