[SCM] Samba Shared Repository - branch master updated
Ralph Böhme
slow at samba.org
Tue Oct 17 09:49:02 UTC 2017
The branch, master has been updated
via a3cc2fe s3/smbd: use correct access in get_file_handle_for_metadata
via 143d262 s3/smbd: fix access checks in set_ea_dos_attribute()
via fbad642 s3/smbd: README.Coding fixes in set_ea_dos_attribute
from 7917f97 vfs_fruit: Replace closedir() by SMB_VFS_CLOSEDIR
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a3cc2fedab37134edd401b88087e20881c4ea18f
Author: Ralph Boehme <slow at samba.org>
Date: Tue Aug 29 16:08:06 2017 +0200
s3/smbd: use correct access in get_file_handle_for_metadata
All we want here is FILE_WRITE_ATTRIBUTES, not FILE_WRITE_DATA.
Bug: https://bugzilla.samba.org/show_bug.cgi?id=12995
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Ralph Böhme <slow at samba.org>
Autobuild-Date(master): Tue Oct 17 11:48:09 CEST 2017 on sn-devel-144
commit 143d26283dad8422fba557de311c304f0093d647
Author: Ralph Boehme <slow at samba.org>
Date: Tue Aug 29 15:55:19 2017 +0200
s3/smbd: fix access checks in set_ea_dos_attribute()
We wanted to set the DOS attributes and failed with permission denied
from the VFS/kernel/filesystem. Next thing we wanna do here is override
this if either
- "dos filemode = true" is set and the security descriptor gives the
user write access or if
- the stored security descriptor has FILE_WRITE_ATTRIBUTES
The former was working, but the latter was not implemented at all.
Bug: https://bugzilla.samba.org/show_bug.cgi?id=12995
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit fbad64200e0199acb644d83073234b2f6c200fce
Author: Ralph Boehme <slow at samba.org>
Date: Thu Oct 12 15:41:01 2017 +0200
s3/smbd: README.Coding fixes in set_ea_dos_attribute
While I'm at it, some README.Coding fixes in set_ea_dos_attribute.
Bug: https://bugzilla.samba.org/show_bug.cgi?id=12995
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/dosmode.c | 35 +++++++++++++++++++++++++----------
1 file changed, 25 insertions(+), 10 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index 3181f2e..8a11c8f 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -415,6 +415,7 @@ NTSTATUS set_ea_dos_attribute(connection_struct *conn,
struct xattr_DOSATTRIB dosattrib;
enum ndr_err_code ndr_err;
DATA_BLOB blob;
+ int ret;
if (!lp_store_dos_attributes(SNUM(conn))) {
return NT_STATUS_NOT_IMPLEMENTED;
@@ -456,14 +457,16 @@ NTSTATUS set_ea_dos_attribute(connection_struct *conn,
return NT_STATUS_INVALID_PARAMETER;
}
- if (SMB_VFS_SETXATTR(conn, smb_fname,
- SAMBA_XATTR_DOS_ATTRIB, blob.data, blob.length,
- 0) == -1) {
+ ret = SMB_VFS_SETXATTR(conn, smb_fname,
+ SAMBA_XATTR_DOS_ATTRIB,
+ blob.data, blob.length, 0);
+ if (ret != 0) {
NTSTATUS status = NT_STATUS_OK;
bool need_close = false;
files_struct *fsp = NULL;
+ bool set_dosmode_ok = false;
- if((errno != EPERM) && (errno != EACCES)) {
+ if ((errno != EPERM) && (errno != EACCES)) {
DBG_INFO("Cannot set "
"attribute EA on file %s: Error = %s\n",
smb_fname_str_dbg(smb_fname), strerror(errno));
@@ -475,10 +478,21 @@ NTSTATUS set_ea_dos_attribute(connection_struct *conn,
*/
/* Check if we have write access. */
- if(!CAN_WRITE(conn) || !lp_dos_filemode(SNUM(conn)))
+ if (!CAN_WRITE(conn)) {
return NT_STATUS_ACCESS_DENIED;
+ }
- if (!can_write_to_file(conn, smb_fname)) {
+ status = smbd_check_access_rights(conn, smb_fname, false,
+ FILE_WRITE_ATTRIBUTES);
+ if (NT_STATUS_IS_OK(status)) {
+ set_dosmode_ok = true;
+ }
+
+ if (!set_dosmode_ok && lp_dos_filemode(SNUM(conn))) {
+ set_dosmode_ok = can_write_to_file(conn, smb_fname);
+ }
+
+ if (!set_dosmode_ok) {
return NT_STATUS_ACCESS_DENIED;
}
@@ -496,9 +510,10 @@ NTSTATUS set_ea_dos_attribute(connection_struct *conn,
}
become_root();
- if (SMB_VFS_FSETXATTR(fsp,
- SAMBA_XATTR_DOS_ATTRIB, blob.data,
- blob.length, 0) == 0) {
+ ret = SMB_VFS_FSETXATTR(fsp,
+ SAMBA_XATTR_DOS_ATTRIB,
+ blob.data, blob.length, 0);
+ if (ret == 0) {
status = NT_STATUS_OK;
}
unbecome_root();
@@ -1152,7 +1167,7 @@ static NTSTATUS get_file_handle_for_metadata(connection_struct *conn,
NULL, /* req */
0, /* root_dir_fid */
smb_fname_cp, /* fname */
- FILE_WRITE_DATA, /* access_mask */
+ FILE_WRITE_ATTRIBUTES, /* access_mask */
(FILE_SHARE_READ | FILE_SHARE_WRITE | /* share_access */
FILE_SHARE_DELETE),
FILE_OPEN, /* create_disposition*/
--
Samba Shared Repository
More information about the samba-cvs
mailing list