mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-29 17:32:43 +00:00
Use v3 protocol by default if it is supported by the server. Allow the
user to force v2 protocol even if the server supports v3. Obtained from: NetBSD but with a slightly different implementation
This commit is contained in:
parent
18cab10cb3
commit
2cd1c32cf8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=25004
@ -31,7 +31,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
|
.\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: mount_nfs.8,v 1.7 1997/02/22 14:32:47 peter Exp $
|
.\" $Id: mount_nfs.8,v 1.8 1997/03/11 12:31:54 peter Exp $
|
||||||
.\""
|
.\""
|
||||||
.Dd March 29, 1995
|
.Dd March 29, 1995
|
||||||
.Dt MOUNT_NFS 8
|
.Dt MOUNT_NFS 8
|
||||||
@ -41,7 +41,7 @@
|
|||||||
.Nd mount nfs file systems
|
.Nd mount nfs file systems
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm mount_nfs
|
.Nm mount_nfs
|
||||||
.Op Fl 3KPTUbcdilqs
|
.Op Fl 23KPTUbcdilqs
|
||||||
.Op Fl D Ar deadthresh
|
.Op Fl D Ar deadthresh
|
||||||
.Op Fl I Ar readdirsize
|
.Op Fl I Ar readdirsize
|
||||||
.Op Fl L Ar leaseterm
|
.Op Fl L Ar leaseterm
|
||||||
@ -72,8 +72,11 @@ Appendix I.
|
|||||||
.Pp
|
.Pp
|
||||||
The options are:
|
The options are:
|
||||||
.Bl -tag -width indent
|
.Bl -tag -width indent
|
||||||
|
.It Fl 2
|
||||||
|
Use the NFS Version 2 protocol (the default is to try version 3 first
|
||||||
|
then version 2).
|
||||||
.It Fl 3
|
.It Fl 3
|
||||||
Use the NFS Version 3 protocol (Version 2 is the default).
|
Use the NFS Version 3 protocol.
|
||||||
.It Fl D
|
.It Fl D
|
||||||
Used with NQNFS to set the
|
Used with NQNFS to set the
|
||||||
.Dq "dead server threshold"
|
.Dq "dead server threshold"
|
||||||
@ -200,6 +203,9 @@ Same as
|
|||||||
.It kerb
|
.It kerb
|
||||||
Same as
|
Same as
|
||||||
.Fl K .
|
.Fl K .
|
||||||
|
.It nfsv2
|
||||||
|
Same as
|
||||||
|
.Fl 2 .
|
||||||
.It nfsv3
|
.It nfsv3
|
||||||
Same as
|
Same as
|
||||||
.Fl 3 .
|
.Fl 3 .
|
||||||
|
@ -45,7 +45,7 @@ static char copyright[] =
|
|||||||
static char sccsid[] = "@(#)mount_nfs.c 8.11 (Berkeley) 5/4/95";
|
static char sccsid[] = "@(#)mount_nfs.c 8.11 (Berkeley) 5/4/95";
|
||||||
*/
|
*/
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"$Id: mount_nfs.c,v 1.19 1997/04/01 17:20:17 guido Exp $";
|
"$Id: mount_nfs.c,v 1.20 1997/04/02 11:30:44 dfr Exp $";
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -105,6 +105,7 @@ static const char rcsid[] =
|
|||||||
#define ALTF_SOFT 0x800
|
#define ALTF_SOFT 0x800
|
||||||
#define ALTF_TCP 0x1000
|
#define ALTF_TCP 0x1000
|
||||||
#define ALTF_PORT 0x2000
|
#define ALTF_PORT 0x2000
|
||||||
|
#define ALTF_NFSV2 0x4000
|
||||||
|
|
||||||
struct mntopt mopts[] = {
|
struct mntopt mopts[] = {
|
||||||
MOPT_STDOPTS,
|
MOPT_STDOPTS,
|
||||||
@ -128,6 +129,7 @@ struct mntopt mopts[] = {
|
|||||||
{ "soft", 0, ALTF_SOFT, 1 },
|
{ "soft", 0, ALTF_SOFT, 1 },
|
||||||
{ "tcp", 0, ALTF_TCP, 1 },
|
{ "tcp", 0, ALTF_TCP, 1 },
|
||||||
{ "port=", 0, ALTF_PORT, 1 },
|
{ "port=", 0, ALTF_PORT, 1 },
|
||||||
|
{ "nfsv2", 0, ALTF_NFSV2, 1 },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -167,6 +169,11 @@ int opflags = 0;
|
|||||||
int nfsproto = IPPROTO_UDP;
|
int nfsproto = IPPROTO_UDP;
|
||||||
int mnttcp_ok = 1;
|
int mnttcp_ok = 1;
|
||||||
u_short port_no = 0;
|
u_short port_no = 0;
|
||||||
|
enum {
|
||||||
|
ANY,
|
||||||
|
V2,
|
||||||
|
V3
|
||||||
|
} mountmode = ANY;
|
||||||
|
|
||||||
#ifdef NFSKERB
|
#ifdef NFSKERB
|
||||||
char inst[INST_SZ];
|
char inst[INST_SZ];
|
||||||
@ -221,7 +228,6 @@ setflags(int* altflags, int* nfsflags, int dir)
|
|||||||
#ifdef NFSKERB
|
#ifdef NFSKERB
|
||||||
F(KERB);
|
F(KERB);
|
||||||
#endif
|
#endif
|
||||||
F(NFSV3);
|
|
||||||
F(RDIRPLUS);
|
F(RDIRPLUS);
|
||||||
F(RESVPORT);
|
F(RESVPORT);
|
||||||
F(NQNFS);
|
F(NQNFS);
|
||||||
@ -262,10 +268,13 @@ main(argc, argv)
|
|||||||
nfsargs = nfsdefargs;
|
nfsargs = nfsdefargs;
|
||||||
nfsargsp = &nfsargs;
|
nfsargsp = &nfsargs;
|
||||||
while ((c = getopt(argc, argv,
|
while ((c = getopt(argc, argv,
|
||||||
"3a:bcdD:g:I:iKL:lm:o:PpqR:r:sTt:w:x:U")) != -1)
|
"23a:bcdD:g:I:iKL:lm:o:PpqR:r:sTt:w:x:U")) != -1)
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
case '2':
|
||||||
|
mountmode = V2;
|
||||||
|
break;
|
||||||
case '3':
|
case '3':
|
||||||
nfsargsp->flags |= NFSMNT_NFSV3;
|
mountmode = V3;
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
num = strtol(optarg, &p, 10);
|
num = strtol(optarg, &p, 10);
|
||||||
@ -334,6 +343,10 @@ main(argc, argv)
|
|||||||
case 'o':
|
case 'o':
|
||||||
altflags = 0;
|
altflags = 0;
|
||||||
setflags(&altflags, &nfsargsp->flags, TRUE);
|
setflags(&altflags, &nfsargsp->flags, TRUE);
|
||||||
|
if (mountmode == V2)
|
||||||
|
altflags |= ALTF_NFSV2;
|
||||||
|
else if (mountmode == V3)
|
||||||
|
altflags |= ALTF_NFSV3;
|
||||||
getmntopts(optarg, mopts, &mntflags, &altflags);
|
getmntopts(optarg, mopts, &mntflags, &altflags);
|
||||||
setflags(&altflags, &nfsargsp->flags, FALSE);
|
setflags(&altflags, &nfsargsp->flags, FALSE);
|
||||||
/*
|
/*
|
||||||
@ -354,6 +367,11 @@ main(argc, argv)
|
|||||||
}
|
}
|
||||||
if(altflags & ALTF_PORT)
|
if(altflags & ALTF_PORT)
|
||||||
port_no = atoi(strstr(optarg, "port=") + 5);
|
port_no = atoi(strstr(optarg, "port=") + 5);
|
||||||
|
mountmode = ANY;
|
||||||
|
if(altflags & ALTF_NFSV2)
|
||||||
|
mountmode = V2;
|
||||||
|
if(altflags & ALTF_NFSV3)
|
||||||
|
mountmode = V3;
|
||||||
break;
|
break;
|
||||||
case 'P':
|
case 'P':
|
||||||
nfsargsp->flags |= NFSMNT_RESVPORT;
|
nfsargsp->flags |= NFSMNT_RESVPORT;
|
||||||
@ -364,7 +382,8 @@ main(argc, argv)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case 'q':
|
case 'q':
|
||||||
nfsargsp->flags |= (NFSMNT_NQNFS | NFSMNT_NFSV3);
|
mountmode = V3;
|
||||||
|
nfsargsp->flags |= NFSMNT_NQNFS;
|
||||||
break;
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
num = strtol(optarg, &p, 10);
|
num = strtol(optarg, &p, 10);
|
||||||
@ -564,7 +583,7 @@ getnfsargs(spec, nfsargsp)
|
|||||||
#endif
|
#endif
|
||||||
struct timeval pertry, try;
|
struct timeval pertry, try;
|
||||||
enum clnt_stat clnt_stat;
|
enum clnt_stat clnt_stat;
|
||||||
int so = RPC_ANYSOCK, i, nfsvers, mntvers;
|
int so = RPC_ANYSOCK, i, nfsvers, mntvers, orgcnt;
|
||||||
char *hostp, *delimp;
|
char *hostp, *delimp;
|
||||||
#ifdef NFSKERB
|
#ifdef NFSKERB
|
||||||
char *cp;
|
char *cp;
|
||||||
@ -645,12 +664,16 @@ getnfsargs(spec, nfsargsp)
|
|||||||
}
|
}
|
||||||
#endif /* NFSKERB */
|
#endif /* NFSKERB */
|
||||||
|
|
||||||
if (nfsargsp->flags & NFSMNT_NFSV3) {
|
orgcnt = retrycnt;
|
||||||
|
tryagain:
|
||||||
|
if (mountmode == ANY || mountmode == V3) {
|
||||||
nfsvers = 3;
|
nfsvers = 3;
|
||||||
mntvers = 3;
|
mntvers = 3;
|
||||||
|
nfsargsp->flags |= NFSMNT_NFSV3;
|
||||||
} else {
|
} else {
|
||||||
nfsvers = 2;
|
nfsvers = 2;
|
||||||
mntvers = 1;
|
mntvers = 1;
|
||||||
|
nfsargsp->flags &= ~NFSMNT_NFSV3;
|
||||||
}
|
}
|
||||||
nfhret.stat = EACCES; /* Mark not yet successful */
|
nfhret.stat = EACCES; /* Mark not yet successful */
|
||||||
while (retrycnt > 0) {
|
while (retrycnt > 0) {
|
||||||
@ -686,6 +709,15 @@ getnfsargs(spec, nfsargsp)
|
|||||||
clnt_stat = clnt_call(clp, RPCMNT_MOUNT,
|
clnt_stat = clnt_call(clp, RPCMNT_MOUNT,
|
||||||
xdr_dir, spec, xdr_fh, &nfhret, try);
|
xdr_dir, spec, xdr_fh, &nfhret, try);
|
||||||
if (clnt_stat != RPC_SUCCESS) {
|
if (clnt_stat != RPC_SUCCESS) {
|
||||||
|
if (clnt_stat == RPC_PROGVERSMISMATCH) {
|
||||||
|
if (mountmode == ANY) {
|
||||||
|
mountmode = V2;
|
||||||
|
goto tryagain;
|
||||||
|
} else {
|
||||||
|
errx(1, "%s",
|
||||||
|
clnt_sperror(clp, "MNT RPC"));
|
||||||
|
}
|
||||||
|
}
|
||||||
if ((opflags & ISBGRND) == 0)
|
if ((opflags & ISBGRND) == 0)
|
||||||
warnx("%s", clnt_sperror(clp,
|
warnx("%s", clnt_sperror(clp,
|
||||||
"bad MNT RPC"));
|
"bad MNT RPC"));
|
||||||
@ -794,7 +826,7 @@ void
|
|||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
(void)fprintf(stderr, "\
|
(void)fprintf(stderr, "\
|
||||||
usage: mount_nfs [-3KPTUbcdilqs] [-D deadthresh] [-I readdirsize]\n\
|
usage: mount_nfs [-23KPTUbcdilqs] [-D deadthresh] [-I readdirsize]\n\
|
||||||
[-L leaseterm] [-R retrycnt] [-a maxreadahead] [-g maxgroups]\n\
|
[-L leaseterm] [-R retrycnt] [-a maxreadahead] [-g maxgroups]\n\
|
||||||
[-m realm] [-o options] [-r readsize] [-t timeout] [-w writesize]\n\
|
[-m realm] [-o options] [-r readsize] [-t timeout] [-w writesize]\n\
|
||||||
[-x retrans] rhost:path node\n");
|
[-x retrans] rhost:path node\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user