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. --- 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_posix_pathnames() && + (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