[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue May 17 18:23:03 MDT 2011


The branch, master has been updated
       via  2873429 Fix bug #8144 - touch /mnt/newfile fails to set timestamp with CIFS client.
       via  87a1888 Fix redefinition of fstrcpy.
      from  9d9d7a7 is_my_ipaddr() should recognise loopback addresses as ours.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 28734295557620c36ffe8f51dcef7158c46d78a0
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.
    
    Autobuild-User: Jeremy Allison <jra at samba.org>
    Autobuild-Date: Wed May 18 02:22:32 CEST 2011 on sn-devel-104

commit 87a1888272127b53bab61a6e69023e67bdfca8d1
Author: Jeremy Allison <jra at samba.org>
Date:   Tue May 17 16:18:37 2011 -0700

    Fix redefinition of fstrcpy.

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

Summary of changes:
 nsswitch/winbind_nss_config.h |    8 +++++++-
 source3/smbd/trans2.c         |   25 +++++++++++++++----------
 2 files changed, 22 insertions(+), 11 deletions(-)


Changeset truncated at 500 lines:

diff --git a/nsswitch/winbind_nss_config.h b/nsswitch/winbind_nss_config.h
index 9231e3c..e1ad3f6 100644
--- a/nsswitch/winbind_nss_config.h
+++ b/nsswitch/winbind_nss_config.h
@@ -54,7 +54,13 @@
 #ifndef FSTRING_LEN
 #define FSTRING_LEN 256
 typedef char fstring[FSTRING_LEN];
-#define fstrcpy(d,s) strlcpy((d),(s) ? (s) : "",sizeof(fstring))
+#ifndef fstrcpy
+#define fstrcpy(d,s) \
+do { \
+        const char *_fstrcpy_src = (const char *)(s); \
+        strlcpy((d),_fstrcpy_src ? _fstrcpy_src : "",sizeof(fstring)); \
+} while (0)
+#endif
 #endif
 
 /* Some systems (SCO) treat UNIX domain sockets as FIFOs */
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 733f1bc..75d0a41 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -7226,6 +7226,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,
@@ -7271,13 +7274,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",
@@ -7355,20 +7359,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