diff options
author | Rodney W. Grimes <rgrimes@FreeBSD.org> | 1995-07-07 07:58:41 +0000 |
---|---|---|
committer | Rodney W. Grimes <rgrimes@FreeBSD.org> | 1995-07-07 07:58:41 +0000 |
commit | 61ef752e7f0193be8196506c471aa1c9a2dc90b8 (patch) | |
tree | 8118617971ddeb04a712e715384e437d92283346 | |
parent | 792c5524f2aff6aa3a5c7d28e142efc8df830063 (diff) | |
download | src-61ef752e7f0193be8196506c471aa1c9a2dc90b8.tar.gz src-61ef752e7f0193be8196506c471aa1c9a2dc90b8.zip |
Branch: RELENG_2_0_5
cvs update -j 1.15.4.1 nfs_subs.c
Notes
Notes:
svn path=/releng/2.0.5/; revision=9424
-rw-r--r-- | sys/nfs/nfs_subs.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/sys/nfs/nfs_subs.c b/sys/nfs/nfs_subs.c index 9aeb0d6e84b3..a2048c27231a 100644 --- a/sys/nfs/nfs_subs.c +++ b/sys/nfs/nfs_subs.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94 - * $Id: nfs_subs.c,v 1.14 1995/05/29 04:01:09 davidg Exp $ + * $Id: nfs_subs.c,v 1.15.4.1 1995/06/28 05:49:39 davidg Exp $ */ /* @@ -712,7 +712,26 @@ nfs_loadattrcache(vpp, mdp, dposp, vaper) fp = (struct nfsv2_fattr *)cp2; vtyp = nfstov_type(fp->fa_type); vmode = fxdr_unsigned(u_short, fp->fa_mode); - if (vtyp == VNON || vtyp == VREG) + /* + * XXX + * + * The duplicate information returned in fa_type and fa_mode + * is an ambiguity in the NFS version 2 protocol. + * + * VREG should be taken literally as a regular file. If a + * server intents to return some type information differently + * in the upper bits of the mode field (e.g. for sockets, or + * FIFOs), NFSv2 mandates fa_type to be VNON. Anyway, we + * leave the examination of the mode bits even in the VREG + * case to avoid breakage for bogus servers, but we make sure + * that there are actually type bits set in the upper part of + * fa_mode (and failing that, trust the va_type field). + * + * NFSv3 cleared the issue, and requires fa_mode to not + * contain any type information (while also introduing sockets + * and FIFOs for fa_type). + */ + if (vtyp == VNON || (vtyp == VREG && (vmode & S_IFMT) != 0)) vtyp = IFTOVT(vmode); if (isnq) { rdev = fxdr_unsigned(long, fp->fa_nqrdev); |