svn commit: r192781 - in head/sys/fs: nfs nfsserver
Rick Macklem
rmacklem at FreeBSD.org
Tue May 26 01:16:10 UTC 2009
Author: rmacklem
Date: Tue May 26 01:16:09 2009
New Revision: 192781
URL: http://svn.freebsd.org/changeset/base/192781
Log:
Fix the handling of NFSv4 Illegal Operation number to conform
to RFC3530 (the operation number in the reply must be set to
the value for OP_ILLEGAL). Also cleaned up some indentation.
Approved by: kib (mentor)
Modified:
head/sys/fs/nfs/nfsport.h
head/sys/fs/nfsserver/nfs_nfsdsocket.c
Modified: head/sys/fs/nfs/nfsport.h
==============================================================================
--- head/sys/fs/nfs/nfsport.h Tue May 26 01:09:33 2009 (r192780)
+++ head/sys/fs/nfs/nfsport.h Tue May 26 01:16:09 2009 (r192781)
@@ -235,6 +235,9 @@
*/
#define NFSV4OP_NOPS 40
+/* Quirky case if the illegal op code */
+#define NFSV4OP_OPILLEGAL 10044
+
/*
* Fake NFSV4OP_xxx used for nfsstat. Start at NFSV4OP_NOPS.
*/
Modified: head/sys/fs/nfsserver/nfs_nfsdsocket.c
==============================================================================
--- head/sys/fs/nfsserver/nfs_nfsdsocket.c Tue May 26 01:09:33 2009 (r192780)
+++ head/sys/fs/nfsserver/nfs_nfsdsocket.c Tue May 26 01:16:09 2009 (r192781)
@@ -639,13 +639,16 @@ nfsrvd_compound(struct nfsrv_descript *n
for (i = 0; i < numops; i++) {
NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
NFSM_BUILD(repp, u_int32_t *, 2 * NFSX_UNSIGNED);
- *repp++ = *tl;
+ *repp = *tl;
op = fxdr_unsigned(int, *tl);
if (op < NFSV4OP_ACCESS || op >= NFSV4OP_NOPS) {
- nd->nd_repstat = NFSERR_OPILLEGAL;
- *repp = nfsd_errmap(nd);
- retops++;
- break;
+ nd->nd_repstat = NFSERR_OPILLEGAL;
+ *repp++ = txdr_unsigned(NFSV4OP_OPILLEGAL);
+ *repp = nfsd_errmap(nd);
+ retops++;
+ break;
+ } else {
+ repp++;
}
/*
@@ -682,12 +685,12 @@ nfsrvd_compound(struct nfsrv_descript *n
nd->nd_repstat = NFSERR_RESOURCE;
*repp = nfsd_errmap(nd);
if (op == NFSV4OP_SETATTR) {
- /*
- * Setattr replies require a bitmap.
- * even for errors like these.
- */
- NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
- *tl = 0;
+ /*
+ * Setattr replies require a bitmap.
+ * even for errors like these.
+ */
+ NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
+ *tl = 0;
}
retops++;
break;
More information about the svn-src-all
mailing list