vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| On Tue, 28 Mar 2006, Otto Moerbeek wrote: > On Tue, 28 Mar 2006, rick@snowhite.cis.uoguelph.ca wrote: > > > > I can confirm your diff fixes things for me. I'm woried about one > > > thing though: what if the client does atime TOSERVER mtime TOCLIENT? > > > That should not be allowed. > > > > > > So here's a revised diff that catches that. > > > > Yep, I'd agree. It seems absurd that a client would do this, but I suppose > > the server should be paranoid and protect against it. Your diff looks fine > > to me. > > It's still not covering all cases: atime TOCLIENT mtime TOSERVER is > allowed, while it should not. Will come up with a new diff tomorrow. > > But this is just fine-tuning, I'm glad we know what is going on now. > Thanks, So here's the promised diff. -Otto Index: nfs_serv.c ================================================== ================= RCS file: /cvs/src/sys/nfs/nfs_serv.c,v retrieving revision 1.39 diff -u -p -r1.39 nfs_serv.c --- nfs_serv.c 18 Jun 2005 18:09:43 -0000 1.39 +++ nfs_serv.c 29 Mar 2006 07:13:26 -0000 @@ -233,6 +233,7 @@ nfsrv_setattr(nfsd, slp, procp, mrq) nfsm_srvmtofh(fhp); VATTR_NULL(&va); if (v3) { + va.va_vaflags |= VA_UTIMES_NULL; nfsm_srvsattr(&va); nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED); gcheck = fxdr_unsigned(int, *tl); Index: nfsm_subs.h ================================================== ================= RCS file: /cvs/src/sys/nfs/nfsm_subs.h,v retrieving revision 1.15 diff -u -p -r1.15 nfsm_subs.h --- nfsm_subs.h 24 Jun 2004 19:35:26 -0000 1.15 +++ nfsm_subs.h 29 Mar 2006 07:13:26 -0000 @@ -467,6 +467,7 @@ nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED); \ switch (fxdr_unsigned(int, *tl)) { \ case NFSV3SATTRTIME_TOCLIENT: \ + (a)->va_vaflags &= ~VA_UTIMES_NULL; \ nfsm_dissect(tl, u_int32_t *, 2 * NFSX_UNSIGNED); \ fxdr_nfsv3time(tl, &(a)->va_atime); \ break; \ @@ -477,6 +478,7 @@ nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED); \ switch (fxdr_unsigned(int, *tl)) { \ case NFSV3SATTRTIME_TOCLIENT: \ + (a)->va_vaflags &= ~VA_UTIMES_NULL; \ nfsm_dissect(tl, u_int32_t *, 2 * NFSX_UNSIGNED); \ fxdr_nfsv3time(tl, &(a)->va_mtime); \ break; \ |
| Thread Tools | |
| Display Modes | |
|
|