[SCM] Samba Shared Repository - branch v3-6-test updated
Karolin Seeger
kseeger at samba.org
Wed May 18 11:36:39 MDT 2011
The branch, v3-6-test has been updated
via d68dbed Fix bug #8144 - touch /mnt/newfile fails to set timestamp with CIFS client.
from 881d39c WHATSNEW: Start release notes.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test
- Log -----------------------------------------------------------------
commit d68dbed16939a4ba04435f7dad490d0a9fa60bdb
Author: Jeremy Allison <jra at samba.org>
Date: Tue May 17 16:18:51 2011 -0700
Fix bug #8144 - touch /mnt/newfile fails to set timestamp with CIFS client.
The extra checks added for Windows correctness in our metadata changing paths
to ensure the file handle has been opened with the correct access mask to
allow FILE_WRITE_ATTRIBUTES etc. caused problems with the POSIX open code.
The old POSIX open code maped O_RDONLY into FILE_READ, O_WRONLY into FILE_WRITE,
and O_RDWR into FILE_READ|FILE_WRITE. This patch extends the mapping to add
FILE_WRITE_ATTRIBUTES, FILE_READ_ATTRIBUTES and FILE_WRITE_EA, FILE_READ_EA to
allow POSIX opens to set these values.
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/trans2.c | 25 +++++++++++++++----------
1 files changed, 15 insertions(+), 10 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 83db346..42b915b 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -7227,6 +7227,9 @@ static NTSTATUS smb_posix_mkdir(connection_struct *conn,
Open/Create a file with POSIX semantics.
****************************************************************************/
+#define SMB_O_RDONLY_MAPPING (FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA)
+#define SMB_O_WRONLY_MAPPING (FILE_WRITE_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA)
+
static NTSTATUS smb_posix_open(connection_struct *conn,
struct smb_request *req,
char **ppdata,
@@ -7272,13 +7275,14 @@ static NTSTATUS smb_posix_open(connection_struct *conn,
switch (wire_open_mode & SMB_ACCMODE) {
case SMB_O_RDONLY:
- access_mask = FILE_READ_DATA;
+ access_mask = SMB_O_RDONLY_MAPPING;
break;
case SMB_O_WRONLY:
- access_mask = FILE_WRITE_DATA;
+ access_mask = SMB_O_WRONLY_MAPPING;
break;
case SMB_O_RDWR:
- access_mask = FILE_READ_DATA|FILE_WRITE_DATA;
+ access_mask = (SMB_O_RDONLY_MAPPING|
+ SMB_O_WRONLY_MAPPING);
break;
default:
DEBUG(5,("smb_posix_open: invalid open mode 0x%x\n",
@@ -7356,20 +7360,21 @@ static NTSTATUS smb_posix_open(connection_struct *conn,
if (wire_open_mode & SMB_O_SYNC) {
create_options |= FILE_WRITE_THROUGH;
}
+ if (wire_open_mode & SMB_O_APPEND) {
+ access_mask |= FILE_APPEND_DATA;
+ }
+ if (wire_open_mode & SMB_O_DIRECT) {
+ mod_unixmode |= FILE_FLAG_NO_BUFFERING;
+ }
+
if ((wire_open_mode & SMB_O_DIRECTORY) ||
VALID_STAT_OF_DIR(smb_fname->st)) {
- if (access_mask != FILE_READ_DATA) {
+ if (access_mask != SMB_O_RDONLY_MAPPING) {
return NT_STATUS_FILE_IS_A_DIRECTORY;
}
create_options &= ~FILE_NON_DIRECTORY_FILE;
create_options |= FILE_DIRECTORY_FILE;
}
- if (wire_open_mode & SMB_O_APPEND) {
- access_mask |= FILE_APPEND_DATA;
- }
- if (wire_open_mode & SMB_O_DIRECT) {
- mod_unixmode |= FILE_FLAG_NO_BUFFERING;
- }
DEBUG(10,("smb_posix_open: file %s, smb_posix_flags = %u, mode 0%o\n",
smb_fname_str_dbg(smb_fname),
--
Samba Shared Repository
More information about the samba-cvs
mailing list