[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Mon Aug 2 18:06:01 UTC 2021
The branch, master has been updated
via 6d928eb1e8e smbd: only open full fd for directories if needed
via e71e373a07e smbd: drop requirement for full open for READ_CONTROL_ACCESS, WRITE_DAC_ACCESS and WRITE_OWNER_ACCESS
from 7818513053a samba-bgqd: Fix samba-bgqd with "clustering=yes"/"include=registry"
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 6d928eb1e8ea44f0d0aea4ec9b1b7c385a281193
Author: Ralph Boehme <slow at samba.org>
Date: Tue Jun 29 12:47:34 2021 +0200
smbd: only open full fd for directories if needed
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14700
RN: File owner not available when file unreadable
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Mon Aug 2 18:05:04 UTC 2021 on sn-devel-184
commit e71e373a07e467ff2d2328f39bd2bc285e2ba840
Author: Ralph Boehme <slow at samba.org>
Date: Sat May 8 21:45:25 2021 +0200
smbd: drop requirement for full open for READ_CONTROL_ACCESS, WRITE_DAC_ACCESS and WRITE_OWNER_ACCESS
This was needed before we had pathref fsps, with pathref fsps we can do
operation requiring WRITE_OWNER_ACCESS, WRITE_DAC_ACCESS and READ_CONTROL_ACCESS
on the pathref fsp.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14700
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/open.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index c29662b4fd2..968dd8ecb00 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1279,10 +1279,7 @@ static NTSTATUS open_file(files_struct *fsp,
FILE_WRITE_DATA |
FILE_APPEND_DATA |
FILE_EXECUTE |
- WRITE_DAC_ACCESS |
- WRITE_OWNER_ACCESS |
- SEC_FLAG_SYSTEM_SECURITY |
- READ_CONTROL_ACCESS;
+ SEC_FLAG_SYSTEM_SECURITY;
bool creating = !file_existed && (flags & O_CREAT);
bool truncating = (flags & O_TRUNC);
bool open_fd = false;
@@ -4407,6 +4404,7 @@ static NTSTATUS open_directory(connection_struct *conn,
struct timespec mtimespec;
int info = 0;
bool ok;
+ uint32_t need_fd_access;
if (is_ntfs_stream_smb_fname(smb_dname)) {
DEBUG(2, ("open_directory: %s is a stream name!\n",
@@ -4599,12 +4597,25 @@ static NTSTATUS open_directory(connection_struct *conn,
*/
mtimespec = make_omit_timespec();
- status = reopen_from_fsp(fsp, O_RDONLY|O_DIRECTORY, 0, NULL);
- if (!NT_STATUS_IS_OK(status)) {
- DBG_INFO("Could not open fd for%s (%s)\n",
- smb_fname_str_dbg(smb_dname),
- nt_errstr(status));
- return status;
+ /*
+ * Obviously for FILE_LIST_DIRECTORY we need to reopen to get an fd
+ * usable for reading a directory. SMB2_FLUSH may be called on
+ * directories opened with FILE_ADD_FILE and FILE_ADD_SUBDIRECTORY so
+ * for those we need to reopen as well.
+ */
+ need_fd_access =
+ FILE_LIST_DIRECTORY |
+ FILE_ADD_FILE |
+ FILE_ADD_SUBDIRECTORY;
+
+ if (access_mask & need_fd_access) {
+ status = reopen_from_fsp(fsp, O_RDONLY | O_DIRECTORY, 0, NULL);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_INFO("Could not open fd for [%s]: %s\n",
+ smb_fname_str_dbg(smb_dname),
+ nt_errstr(status));
+ return status;
+ }
}
status = vfs_stat_fsp(fsp);
--
Samba Shared Repository
More information about the samba-cvs
mailing list