diff options
author | Reuben Thomas <rrt@sc3d.org> | 2007-11-21 21:50:13 +0000 |
---|---|---|
committer | Reuben Thomas <rrt@sc3d.org> | 2007-11-21 21:50:13 +0000 |
commit | 49b29ec63167c2c772cf7103450ff21d94e742a2 (patch) | |
tree | 5c4e77bb9d8c0543b11c15b2a82e2c87cab26699 | |
parent | 4f33a4fd430c7ed354df75baf34dc00227b7a6a7 (diff) | |
download | plptools-49b29ec63167c2c772cf7103450ff21d94e742a2.tar.gz plptools-49b29ec63167c2c772cf7103450ff21d94e742a2.tar.bz2 plptools-49b29ec63167c2c772cf7103450ff21d94e742a2.zip |
Stop the NFS type bits being clobbered by changing mode bits.
-rw-r--r-- | include/nfs_prot.h | 1 | ||||
-rw-r--r-- | plpnfsd/mp_pfs_ops.c | 5 |
2 files changed, 4 insertions, 2 deletions
diff --git a/include/nfs_prot.h b/include/nfs_prot.h index 8bc490f..acba688 100644 --- a/include/nfs_prot.h +++ b/include/nfs_prot.h @@ -40,6 +40,7 @@ #define NFSMODE_LNK 0120000 #define NFSMODE_SOCK 0140000 #define NFSMODE_FIFO 0010000 +#define NFSMODE_MASK 07770000 #if !defined(hpux) && !defined(__sgi) enum nfsstat { diff --git a/plpnfsd/mp_pfs_ops.c b/plpnfsd/mp_pfs_ops.c index e90b7a5..03b0811 100644 --- a/plpnfsd/mp_pfs_ops.c +++ b/plpnfsd/mp_pfs_ops.c @@ -1001,7 +1001,7 @@ nfsproc_setattr_2(sattrargs *sa) if (rfsv_isalive()) add_cache(&attrcache, inode->inode, fp); } - if ((sa->attributes.mode != fp->mode) && + if ((sa->attributes.mode != (fp->mode & ~NFSMODE_MASK)) && (sa->attributes.mode != -1)) { long psisattr, psidattr; attr2pattr(sa->attributes.mode, fp->mode, &psisattr, &psidattr); @@ -1017,7 +1017,8 @@ nfsproc_setattr_2(sattrargs *sa) return &res; } } - fp->mode = sa->attributes.mode; + debuglog("changing mode from %o to %o\n", fp->mode, (fp->mode & NFSMODE_MASK) | sa->attributes.mode); + fp->mode = (fp->mode & NFSMODE_MASK) | sa->attributes.mode; rem_cache(&attrcache, inode->inode); if (rfsv_isalive() && !builtin) add_cache(&attrcache, inode->inode, fp); |