[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