[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Sep 4 17:57:02 MDT 2012


The branch, master has been updated
       via  084978f s3: Slightly simplify fd_open_atomic
       via  d95d326 s3: Put a comment into the right place
       via  d0df12f s3: Fix a typo
       via  63279e3 s3: Factor out disposition_to_open_flags
       via  f67a6c4 s3: Factor out calculation of clear_ads
       via  0d86932 s3: Slightly simplify open_file_ntcreate
       via  25bdc36 s3: Fix a comment
       via  93e10db s3: Make "open_match_attributes" static
       via  1c9b1e0 s3: Fix some nonempty blank lines
       via  2fe08c8 s3: Fix memleaks in pylibsmb.c
      from  2172a14 s3: in sys_popen(), add a debug message for failed fork

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


- Log -----------------------------------------------------------------
commit 084978f3d0306b7800c3ce64bf99ba30e6ac2fb1
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Sep 3 12:57:18 2012 +0200

    s3: Slightly simplify fd_open_atomic
    
    Replace an if-statement by a direct assignment
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Sep  5 01:56:46 CEST 2012 on sn-devel-104

commit d95d32606b5f90e865c3c8eef95f14be938b3bbe
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Sep 2 12:42:59 2012 +0200

    s3: Put a comment into the right place
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit d0df12f3ea6d3ad9bc83d9628ab68da9b4cc44d4
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Aug 29 17:19:04 2012 +0200

    s3: Fix a typo
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 63279e374a26e4b855b5089b8d616f199609d8fe
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Sep 2 20:47:46 2012 +0200

    s3: Factor out disposition_to_open_flags
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit f67a6c463cbe14dfaaeb8a6255cfb587eea1b5a2
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Sep 2 13:06:22 2012 +0200

    s3: Factor out calculation of clear_ads
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 0d869327edaede4f573cd607a14538d92160a286
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Sep 2 12:53:04 2012 +0200

    s3: Slightly simplify open_file_ntcreate
    
    We have not set flags2 before, so do direct assignment and not |=
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 25bdc3641890cc0fc5f4587e011c968d4b4f6a6b
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Sep 2 07:35:43 2012 +0200

    s3: Fix a comment
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 93e10db3dde3616ab61bf28e0b9c44378d445ab5
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Aug 31 14:52:21 2012 +0200

    s3: Make "open_match_attributes" static
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 1c9b1e07662dca308c8432890d3d5055639b675a
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Aug 31 14:41:44 2012 +0200

    s3: Fix some nonempty blank lines
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

commit 2fe08c886ae60c0affae0166ce1cdab1593bab3e
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Aug 20 13:43:41 2012 +0200

    s3: Fix memleaks in pylibsmb.c
    
    Cut&Paste errors from the read&x routine
    
    Signed-off-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/lib/dbwrap/dbwrap_watch.h |    2 +-
 source3/libsmb/pylibsmb.c         |    4 +-
 source3/locking/share_mode_lock.c |    2 +-
 source3/passdb/lookup_sid.c       |    6 +-
 source3/smbd/open.c               |  139 ++++++++++++++++++++++++-------------
 source3/smbd/proto.h              |    6 --
 6 files changed, 99 insertions(+), 60 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/dbwrap/dbwrap_watch.h b/source3/lib/dbwrap/dbwrap_watch.h
index 66fef32..3362e45 100644
--- a/source3/lib/dbwrap/dbwrap_watch.h
+++ b/source3/lib/dbwrap/dbwrap_watch.h
@@ -43,4 +43,4 @@ void dbwrap_watchers_traverse_read(
 void dbwrap_watchers_wakeall(struct messaging_context *msg);
 
 
-#endif /* __DBWRAP_H__ */
+#endif /* __DBWRAP_WATCH_H__ */
diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c
index be04e5b..d8e64b3 100644
--- a/source3/libsmb/pylibsmb.c
+++ b/source3/libsmb/pylibsmb.c
@@ -577,9 +577,9 @@ static PyObject *py_cli_ftruncate(struct py_cli_state *self, PyObject *args,
 		return NULL;
 	}
 	status = cli_ftruncate_recv(req);
+	TALLOC_FREE(req);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(req);
 		PyErr_SetNTSTATUS(status);
 		return NULL;
 	}
@@ -609,9 +609,9 @@ static PyObject *py_cli_delete_on_close(struct py_cli_state *self,
 		return NULL;
 	}
 	status = cli_nt_delete_on_close_recv(req);
+	TALLOC_FREE(req);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(req);
 		PyErr_SetNTSTATUS(status);
 		return NULL;
 	}
diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c
index 171c72f..a82c44e 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -346,7 +346,7 @@ static int the_lock_destructor(struct share_mode_lock *l)
 }
 
 /*******************************************************************
- Get a share_mode_lock, Reference counted to allow nexted calls.
+ Get a share_mode_lock, Reference counted to allow nested calls.
 ********************************************************************/
 
 struct share_mode_lock *get_share_mode_lock(
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c
index 76a454c..e48420d 100644
--- a/source3/passdb/lookup_sid.c
+++ b/source3/passdb/lookup_sid.c
@@ -1085,15 +1085,15 @@ static bool legacy_sid_to_unixid(const struct dom_sid *psid, struct unixid *id)
 {
 	GROUP_MAP *map;
 	bool ret;
-	
+
 	become_root();
 	ret = pdb_sid_to_id(psid, id);
 	unbecome_root();
-	
+
 	if (ret) {
 		goto done;
 	}
-	
+
 	if ((sid_check_is_in_builtin(psid) ||
 	     sid_check_is_in_wellknown_domain(psid))) {
 		map = talloc_zero(NULL, GROUP_MAP);
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 381f3b5..6378521 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -563,14 +563,13 @@ static NTSTATUS fd_open_atomic(struct connection_struct *conn,
 		 * Fail if already exists, just pass through.
 		 */
 		status = fd_open(conn, fsp, flags, mode);
-		if (NT_STATUS_IS_OK(status)) {
-			/*
-			 * Here we've opened with O_CREAT|O_EXCL
-			 * and got success. We *know* we created
-			 * this file.
-			 */
-			*file_created = true;
-		}
+
+		/*
+		 * Here we've opened with O_CREAT|O_EXCL. If that went
+		 * NT_STATUS_OK, we *know* we created this file.
+		 */
+		*file_created = NT_STATUS_IS_OK(status);
+
 		return status;
 	}
 
@@ -1480,12 +1479,12 @@ static void defer_open(struct share_mode_lock *lck,
  On overwrite open ensure that the attributes match.
 ****************************************************************************/
 
-bool open_match_attributes(connection_struct *conn,
-			   uint32 old_dos_attr,
-			   uint32 new_dos_attr,
-			   mode_t existing_unx_mode,
-			   mode_t new_unx_mode,
-			   mode_t *returned_unx_mode)
+static bool open_match_attributes(connection_struct *conn,
+				  uint32 old_dos_attr,
+				  uint32 new_dos_attr,
+				  mode_t existing_unx_mode,
+				  mode_t new_unx_mode,
+				  mode_t *returned_unx_mode)
 {
 	uint32 noarch_old_dos_attr, noarch_new_dos_attr;
 
@@ -1778,6 +1777,75 @@ bool is_deferred_open_async(const void *ptr)
 	return state->async_open;
 }
 
+static bool clear_ads(uint32_t create_disposition)
+{
+	bool ret = false;
+
+	switch (create_disposition) {
+	case FILE_SUPERSEDE:
+	case FILE_OVERWRITE_IF:
+	case FILE_OVERWRITE:
+		ret = true;
+		break;
+	default:
+		break;
+	}
+	return ret;
+}
+
+static int disposition_to_open_flags(uint32_t create_disposition)
+{
+	int ret = 0;
+
+	/*
+	 * Currently we're using FILE_SUPERSEDE as the same as
+	 * FILE_OVERWRITE_IF but they really are
+	 * different. FILE_SUPERSEDE deletes an existing file
+	 * (requiring delete access) then recreates it.
+	 */
+
+	switch (create_disposition) {
+	case FILE_SUPERSEDE:
+	case FILE_OVERWRITE_IF:
+		/*
+		 * If file exists replace/overwrite. If file doesn't
+		 * exist create.
+		 */
+		ret = O_CREAT|O_TRUNC;
+		break;
+
+	case FILE_OPEN:
+		/*
+		 * If file exists open. If file doesn't exist error.
+		 */
+		ret = 0;
+		break;
+
+	case FILE_OVERWRITE:
+		/*
+		 * If file exists overwrite. If file doesn't exist
+		 * error.
+		 */
+		ret = O_TRUNC;
+		break;
+
+	case FILE_CREATE:
+		/*
+		 * If file exists error. If file doesn't exist create.
+		 */
+		ret = O_CREAT|O_EXCL;
+		break;
+
+	case FILE_OPEN_IF:
+		/*
+		 * If file exists open. If file doesn't exist create.
+		 */
+		ret = O_CREAT;
+		break;
+	}
+	return ret;
+}
+
 /****************************************************************************
  Open a file with a share mode. Passed in an already created files_struct *.
 ****************************************************************************/
@@ -1802,7 +1870,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 	bool def_acl = False;
 	bool posix_open = False;
 	bool new_file_created = False;
-	bool clear_ads = false;
 	NTSTATUS fsp_open = NT_STATUS_ACCESS_DENIED;
 	mode_t new_unx_mode = (mode_t)0;
 	mode_t unx_mode = (mode_t)0;
@@ -1933,26 +2000,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 	}
 
 	switch( create_disposition ) {
-		/*
-		 * Currently we're using FILE_SUPERSEDE as the same as
-		 * FILE_OVERWRITE_IF but they really are
-		 * different. FILE_SUPERSEDE deletes an existing file
-		 * (requiring delete access) then recreates it.
-		 */
-		case FILE_SUPERSEDE:
-			/* If file exists replace/overwrite. If file doesn't
-			 * exist create. */
-			flags2 |= (O_CREAT | O_TRUNC);
-			clear_ads = true;
-			break;
-
-		case FILE_OVERWRITE_IF:
-			/* If file exists replace/overwrite. If file doesn't
-			 * exist create. */
-			flags2 |= (O_CREAT | O_TRUNC);
-			clear_ads = true;
-			break;
-
 		case FILE_OPEN:
 			/* If file exists open. If file doesn't exist error. */
 			if (!file_existed) {
@@ -1976,8 +2023,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 				errno = ENOENT;
 				return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 			}
-			flags2 |= O_TRUNC;
-			clear_ads = true;
 			break;
 
 		case FILE_CREATE:
@@ -1995,19 +2040,18 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 				}
 				return map_nt_error_from_unix(errno);
 			}
-			flags2 |= (O_CREAT|O_EXCL);
 			break;
 
+		case FILE_SUPERSEDE:
+		case FILE_OVERWRITE_IF:
 		case FILE_OPEN_IF:
-			/* If file exists open. If file doesn't exist
-			 * create. */
-			flags2 |= O_CREAT;
 			break;
-
 		default:
 			return NT_STATUS_INVALID_PARAMETER;
 	}
 
+	flags2 = disposition_to_open_flags(create_disposition);
+
 	/* We only care about matching attributes on file exists and
 	 * overwrite. */
 
@@ -2494,7 +2538,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 	SMB_ASSERT(lck != NULL);
 
 	/* Delete streams if create_disposition requires it */
-	if (!new_file_created && clear_ads &&
+	if (!new_file_created && clear_ads(create_disposition) &&
 	    !is_ntfs_stream_smb_fname(smb_fname)) {
 		status = delete_all_streams(conn, smb_fname->base_name);
 		if (!NT_STATUS_IS_OK(status)) {
@@ -3639,11 +3683,12 @@ static NTSTATUS create_file_unixpath(connection_struct *conn,
 			goto fail;
 		}
 
-		/*
-		 * We're opening the stream element of a base_fsp
-		 * we already opened. Set up the base_fsp pointer.
-		 */
 		if (base_fsp) {
+			/*
+			 * We're opening the stream element of a
+			 * base_fsp we already opened. Set up the
+			 * base_fsp pointer.
+			 */
 			fsp->base_fsp = base_fsp;
 		}
 
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 5f4947e..b7bab6e 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -608,12 +608,6 @@ NTSTATUS change_dir_owner_to_parent(connection_struct *conn,
 				    const char *fname,
 				    SMB_STRUCT_STAT *psbuf);
 bool is_stat_open(uint32 access_mask);
-bool open_match_attributes(connection_struct *conn,
-			   uint32 old_dos_attr,
-			   uint32 new_dos_attr,
-			   mode_t existing_unx_mode,
-			   mode_t new_unx_mode,
-			   mode_t *returned_unx_mode);
 void remove_deferred_open_entry(struct file_id id, uint64_t mid,
 				struct server_id pid);
 bool is_deferred_open_async(const void *ptr);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list