From 4c63e0c4c98beaea8ceb80b40e04185da2fa6c43 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 22 Sep 2010 12:26:13 -0700 Subject: [PATCH] Fix bug #7693 - smbd changing mode of files on rename When using "map archive", don't change the archive bit on renames or writes with UNIX extensions turned on. Jeremy. (cherry picked from commit 314dc23ecfb5fc014f9c2ef70bd508eb837632b0) --- source3/smbd/fileio.c | 13 +++++++------ source3/smbd/reply.c | 5 +++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c index 1c27fef..9754b71 100644 --- a/source3/smbd/fileio.c +++ b/source3/smbd/fileio.c @@ -312,14 +312,15 @@ ssize_t write_file(struct smb_request *req, fsp->modified = True; if (SMB_VFS_FSTAT(fsp, &fsp->fsp_name->st) == 0) { - int dosmode; trigger_write_time_update(fsp); - dosmode = dos_mode(fsp->conn, fsp->fsp_name); - if ((lp_store_dos_attributes(SNUM(fsp->conn)) || - MAP_ARCHIVE(fsp->conn)) && - !IS_DOS_ARCHIVE(dosmode)) { - file_set_dosmode(fsp->conn, fsp->fsp_name, + if (!fsp->posix_open && + (lp_store_dos_attributes(SNUM(fsp->conn)) || + MAP_ARCHIVE(fsp->conn))) { + int dosmode = dos_mode(fsp->conn, fsp->fsp_name); + if (!IS_DOS_ARCHIVE(dosmode)) { + file_set_dosmode(fsp->conn, fsp->fsp_name, dosmode | aARCH, NULL, false); + } } /* diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index c9c80e8..7a4156a 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -5846,8 +5846,9 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, "%s -> %s\n", smb_fname_str_dbg(fsp->fsp_name), smb_fname_str_dbg(smb_fname_dst))); - if (lp_map_archive(SNUM(conn)) || - lp_store_dos_attributes(SNUM(conn))) { + if (!lp_unix_extensions() && + (lp_map_archive(SNUM(conn)) || + lp_store_dos_attributes(SNUM(conn)))) { /* We must set the archive bit on the newly renamed file. */ if (SMB_VFS_STAT(conn, smb_fname_dst) == 0) { -- 1.7.0.4