summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2010-09-22 12:26:13 -0700
committerJeremy Allison <jra@samba.org>2010-09-22 12:26:13 -0700
commit314dc23ecfb5fc014f9c2ef70bd508eb837632b0 (patch)
tree75fcf4bd2238731ebd7efc6b3d3534b86760be9b
parentcf6e773e1a75b1d7d32dfa952d3bb743db6e1b7c (diff)
downloadsamba-314dc23ecfb5fc014f9c2ef70bd508eb837632b0.tar.gz
samba-314dc23ecfb5fc014f9c2ef70bd508eb837632b0.tar.bz2
samba-314dc23ecfb5fc014f9c2ef70bd508eb837632b0.zip
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.
-rw-r--r--source3/smbd/fileio.c13
-rw-r--r--source3/smbd/reply.c5
2 files changed, 10 insertions, 8 deletions
diff --git a/source3/smbd/fileio.c b/source3/smbd/fileio.c
index b4e8a1d5d4..aec6554436 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 ff77507471..3e8e716b6a 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -6096,8 +6096,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) {