NFSD: Set the attributes used to store the verifier for EXCLUSIVE4_1
According to rfc5661 18.16.4, "If EXCLUSIVE4_1 was used, the client determines the attributes used for the verifier by comparing attrset with cva_attrs.attrmask;" So, EXCLUSIVE4_1 also needs those bitmask used to store the verifier. Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
7d580722c9
commit
ead8fb8c24
@ -276,13 +276,13 @@ do_open_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, stru
|
||||
nfsd4_security_inode_setsecctx(*resfh, &open->op_label, open->op_bmval);
|
||||
|
||||
/*
|
||||
* Following rfc 3530 14.2.16, use the returned bitmask
|
||||
* to indicate which attributes we used to store the
|
||||
* verifier:
|
||||
* Following rfc 3530 14.2.16, and rfc 5661 18.16.4
|
||||
* use the returned bitmask to indicate which attributes
|
||||
* we used to store the verifier:
|
||||
*/
|
||||
if (open->op_createmode == NFS4_CREATE_EXCLUSIVE && status == 0)
|
||||
open->op_bmval[1] = (FATTR4_WORD1_TIME_ACCESS |
|
||||
FATTR4_WORD1_TIME_MODIFY);
|
||||
if (nfsd_create_is_exclusive(open->op_createmode) && status == 0)
|
||||
open->op_bmval[1] |= (FATTR4_WORD1_TIME_ACCESS |
|
||||
FATTR4_WORD1_TIME_MODIFY);
|
||||
} else
|
||||
/*
|
||||
* Note this may exit with the parent still locked.
|
||||
|
@ -1249,12 +1249,6 @@ out_nfserr:
|
||||
|
||||
#ifdef CONFIG_NFSD_V3
|
||||
|
||||
static inline int nfsd_create_is_exclusive(int createmode)
|
||||
{
|
||||
return createmode == NFS3_CREATE_EXCLUSIVE
|
||||
|| createmode == NFS4_CREATE_EXCLUSIVE4_1;
|
||||
}
|
||||
|
||||
/*
|
||||
* NFSv3 and NFSv4 version of nfsd_create
|
||||
*/
|
||||
|
@ -131,4 +131,10 @@ static inline __be32 fh_getattr(struct svc_fh *fh, struct kstat *stat)
|
||||
return nfserrno(vfs_getattr(&p, stat));
|
||||
}
|
||||
|
||||
static inline int nfsd_create_is_exclusive(int createmode)
|
||||
{
|
||||
return createmode == NFS3_CREATE_EXCLUSIVE
|
||||
|| createmode == NFS4_CREATE_EXCLUSIVE4_1;
|
||||
}
|
||||
|
||||
#endif /* LINUX_NFSD_VFS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user