The branch, v3-6-test has been updated
       via  318c77e Fix bug 8133 - strange behavior for the file (whose 
filename first character is period ) in SMB2 case.
       via  e66e505 Optimization. If the attributes passed to can_rename() 
include both FILE_ATTRIBUTE_HIDDEN and FILE_ATTRIBUTE_SYSTEM then there's no 
point in reading the source DOS attribute, as we're not going to deny the 
rename on attribute match.
      from  9231770 Make protocol version 2 the default protocol, and only run 
on version 1 if V1 is explcitly given as a module option.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 318c77ec46c3769d462bada130956d0081c48be2
Author: Jeremy Allison <j...@samba.org>
Date:   Thu May 19 16:39:18 2011 -0700

    Fix bug 8133 - strange behavior for the file (whose filename first 
character is period ) in SMB2 case.
    
    When doing SMB2 renames, we need to match all filetypes (no attributes 
field in the SMB2 call).
    By default a file starting with a period is returned as 
FILE_ATTRIBUTE_HIDDEN in Samba.
    
    Autobuild-User: Jeremy Allison <j...@samba.org>
    Autobuild-Date: Fri May 20 19:26:04 CEST 2011 on sn-devel-104

commit e66e505db8e3e6c7938eb09dc55e080f7754ddd1
Author: Jeremy Allison <j...@samba.org>
Date:   Thu May 19 16:38:11 2011 -0700

    Optimization. If the attributes passed to can_rename() include both 
FILE_ATTRIBUTE_HIDDEN and FILE_ATTRIBUTE_SYSTEM then there's no point in 
reading the source DOS attribute, as we're not going to deny the rename on 
attribute match.

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

Summary of changes:
 source3/smbd/reply.c  |   13 ++++++++-----
 source3/smbd/trans2.c |    5 +++--
 2 files changed, 11 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 9c66dde..099a36e 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -2381,15 +2381,18 @@ void reply_ctemp(struct smb_request *req)
 static NTSTATUS can_rename(connection_struct *conn, files_struct *fsp,
                        uint16 dirtype)
 {
-       uint32 fmode;
-
        if (!CAN_WRITE(conn)) {
                return NT_STATUS_MEDIA_WRITE_PROTECTED;
        }
 
-       fmode = dos_mode(conn, fsp->fsp_name);
-       if ((fmode & ~dirtype) & (FILE_ATTRIBUTE_HIDDEN | 
FILE_ATTRIBUTE_SYSTEM)) {
-               return NT_STATUS_NO_SUCH_FILE;
+       if ((dirtype & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) !=
+                       (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
+               /* Only bother to read the DOS attribute if we might deny the
+                  rename on the grounds of attribute missmatch. */
+               uint32_t fmode = dos_mode(conn, fsp->fsp_name);
+               if ((fmode & ~dirtype) & (FILE_ATTRIBUTE_HIDDEN | 
FILE_ATTRIBUTE_SYSTEM)) {
+                       return NT_STATUS_NO_SUCH_FILE;
+               }
        }
 
        if (S_ISDIR(fsp->fsp_name->st.st_ex_mode)) {
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 42b915b..be3d5a6 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -6051,8 +6051,9 @@ static NTSTATUS 
smb2_file_rename_information(connection_struct *conn,
                  "SMB_FILE_RENAME_INFORMATION (fnum %d) %s -> %s\n",
                  fsp->fnum, fsp_str_dbg(fsp),
                  smb_fname_str_dbg(smb_fname_dst)));
-       status = rename_internals_fsp(conn, fsp, smb_fname_dst, 0,
-                                     overwrite);
+       status = rename_internals_fsp(conn, fsp, smb_fname_dst,
+                               (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM),
+                               overwrite);
 
  out:
        TALLOC_FREE(smb_fname_dst);


-- 
Samba Shared Repository

Reply via email to