nfsd: Make creates return EEXIST instead of EACCES
When doing a create (mkdir/mknod) on a name, it's worth checking the name exists first before returning EACCES in case the directory is not writeable by the user. This makes return values on the client more consistent regardless of whenever the entry there is cached in the local cache or not. Another positive side effect is certain programs only expect EEXIST in that case even despite POSIX allowing any valid error to be returned. Signed-off-by: Oleg Drokin <green@linuxhacker.ru> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:

committed by
J. Bruce Fields

parent
c7995f8a70
commit
7eed34f18d
@@ -605,8 +605,12 @@ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||
|
||||
fh_init(&resfh, NFS4_FHSIZE);
|
||||
|
||||
/*
|
||||
* We just check that parent is accessible here, nfsd_* do their
|
||||
* own access permission checks
|
||||
*/
|
||||
status = fh_verify(rqstp, &cstate->current_fh, S_IFDIR,
|
||||
NFSD_MAY_CREATE);
|
||||
NFSD_MAY_EXEC);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
|
Reference in New Issue
Block a user