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