nfs-utils/nfs-utils-1.2.4-mountshortcut.patch

53 lines
1.7 KiB
Diff
Raw Normal View History

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;
}