53 lines
1.7 KiB
Diff
53 lines
1.7 KiB
Diff
|
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;
|
||
|
}
|