1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-05 20:58:40 +03:00

smbd: Simplify dropbox special case in unix_convert

EACCESS needs special treatment: If we want to create a fresh file,
return OBJECT_PATH_NOT_FOUND, so that the client will continue creating
the file. If the client wants us to open a potentially existing file,
we need to correctly return ACCESS_DENIED.

This patch makes this behaviour hopefully a bit clearer than the code
before did.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>

Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Mon Aug 26 12:14:26 CEST 2013 on sn-devel-104
This commit is contained in:
Volker Lendecke 2013-08-19 10:26:00 +00:00
parent 84b8bddd7d
commit 76142780fb

View File

@ -718,13 +718,30 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
/*
* ENOENT/EACCESS are the only valid errors
* here. EACCESS needs handling here for
* "dropboxes", i.e. directories where users
* can only put stuff with permission -wx.
* here.
*/
if ((errno != 0) && (errno != ENOENT)
&& ((ucf_flags & UCF_CREATING_FILE) &&
(errno != EACCES))) {
if (errno == EACCES) {
if (ucf_flags & UCF_CREATING_FILE) {
/*
* This is the dropbox
* behaviour. A dropbox is a
* directory with only -wx
* permissions, so
* get_real_filename fails
* with EACCESS, it needs to
* list the directory. We
* nevertheless want to allow
* users creating a file.
*/
status = NT_STATUS_OBJECT_PATH_NOT_FOUND;
} else {
status = NT_STATUS_ACCESS_DENIED;
}
goto fail;
}
if ((errno != 0) && (errno != ENOENT)) {
/*
* ENOTDIR and ELOOP both map to
* NT_STATUS_OBJECT_PATH_NOT_FOUND