The branch, master has been updated
       via  0657db26447 s3: smbd: Explicitly code the semantics of "dos 
filemode" into the chown code.
      from  147dd9d58a4 libcli/smb: let smb2_negotiate_context_parse() only 
parse the expected number of contexts

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 0657db26447ad9b0d2130fe07163e953eba2bcc2
Author: Jeremy Allison <j...@samba.org>
Date:   Mon Jun 28 13:54:52 2021 -0700

    s3: smbd: Explicitly code the semantics of "dos filemode" into the chown 
code.
    
    We actually don't need this to get the right semantics, as the open or the
    set_sd() code catches the correct cases and returns ACCESS_DENIED, but it
    makes me much happier to see the prerequisites needed expressed in code here
    right at the point of use.
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Tue Jul 13 08:11:36 UTC 2021 on sn-devel-184

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/posix_acls.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c
index 8bfaea27e39..899e7dc3c1e 100644
--- a/source3/smbd/posix_acls.c
+++ b/source3/smbd/posix_acls.c
@@ -3440,9 +3440,24 @@ NTSTATUS try_chown(files_struct *fsp, uid_t uid, gid_t 
gid)
        }
 
        /* Case (4). */
+       /* If "dos filemode" isn't set, we're done. */
        if (!lp_dos_filemode(SNUM(fsp->conn))) {
                return NT_STATUS_ACCESS_DENIED;
        }
+       /*
+        * If we have a writable handle, obviously we
+        * can write to the file.
+        */
+       if (!fsp->fsp_flags.can_write) {
+               /*
+                * If we don't have a writable handle, we
+                * need to read the ACL on the file to
+                * see if we can write to it.
+                */
+               if (!can_write_to_fsp(fsp)) {
+                       return NT_STATUS_ACCESS_DENIED;
+               }
+       }
 
        /* only allow chown to the current user. This is more secure,
           and also copes with the case where the SID in a take ownership ACL is


-- 
Samba Shared Repository

Reply via email to