The branch, master has been updated
       via  5efd7e1 s3: Move can_delete_directory to smbd/, remove shim
       via  34d58c9 s3: Move can_set_delete_on_close to smbd/
       via  2d2d72e s3: Remove an else{} in remove_deferred_open_entry
       via  3239c72 s3-dbwrap: Simplify db_tdb_fetchlock_parse a bit
      from  3cf275c s3:smbd/msdfs: enum_msdfs_links() doesn't need a 
smbd_server_connection anymore

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


- Log -----------------------------------------------------------------
commit 5efd7e16c24ed7d1ab510158ea9b2f6fd0b81922
Author: Volker Lendecke <[email protected]>
Date:   Tue Dec 13 16:07:18 2011 +0100

    s3: Move can_delete_directory to smbd/, remove shim
    
    Autobuild-User: Volker Lendecke <[email protected]>
    Autobuild-Date: Tue Dec 13 19:00:37 CET 2011 on sn-devel-104

commit 34d58c9d92f852e908acb78e040c1a22ce1591c1
Author: Volker Lendecke <[email protected]>
Date:   Tue Dec 13 16:01:59 2011 +0100

    s3: Move can_set_delete_on_close to smbd/

commit 2d2d72e479142ad7d1a40955793bcf63d5b4ee14
Author: Volker Lendecke <[email protected]>
Date:   Tue Dec 13 13:56:49 2011 +0100

    s3: Remove an else{} in remove_deferred_open_entry

commit 3239c722aa528a4f00f3201425182f7f105dbfe2
Author: Volker Lendecke <[email protected]>
Date:   Fri Dec 9 16:39:09 2011 +0100

    s3-dbwrap: Simplify db_tdb_fetchlock_parse a bit
    
    Introduce a local variable for the result, replace "state->result" by 
"result"

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

Summary of changes:
 source3/lib/dbwrap/dbwrap_tdb.c |   21 +++++++------
 source3/lib/smbd_shim.c         |    9 ------
 source3/lib/smbd_shim.h         |    3 --
 source3/locking/locking.c       |   59 ---------------------------------------
 source3/locking/proto.h         |    1 -
 source3/smbd/dir.c              |    4 +-
 source3/smbd/file_access.c      |   59 +++++++++++++++++++++++++++++++++++++++
 source3/smbd/globals.c          |    1 -
 source3/smbd/open.c             |    6 ++--
 source3/smbd/proto.h            |    3 +-
 10 files changed, 76 insertions(+), 90 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/dbwrap/dbwrap_tdb.c b/source3/lib/dbwrap/dbwrap_tdb.c
index 6a4636a..fbb05cc 100644
--- a/source3/lib/dbwrap/dbwrap_tdb.c
+++ b/source3/lib/dbwrap/dbwrap_tdb.c
@@ -73,28 +73,29 @@ static int db_tdb_fetchlock_parse(TDB_DATA key, TDB_DATA 
data,
 {
        struct tdb_fetch_locked_state *state =
                (struct tdb_fetch_locked_state *)private_data;
+       struct db_record *result;
 
-       state->result = (struct db_record *)talloc_size(
+       result = (struct db_record *)talloc_size(
                state->mem_ctx,
                sizeof(struct db_record) + key.dsize + data.dsize);
 
-       if (state->result == NULL) {
+       if (result == NULL) {
                return 0;
        }
+       state->result = result;
 
-       state->result->key.dsize = key.dsize;
-       state->result->key.dptr = ((uint8 *)state->result)
-               + sizeof(struct db_record);
-       memcpy(state->result->key.dptr, key.dptr, key.dsize);
+       result->key.dsize = key.dsize;
+       result->key.dptr = ((uint8 *)result) + sizeof(struct db_record);
+       memcpy(result->key.dptr, key.dptr, key.dsize);
 
-       state->result->value.dsize = data.dsize;
+       result->value.dsize = data.dsize;
 
        if (data.dsize > 0) {
-               state->result->value.dptr = state->result->key.dptr+key.dsize;
-               memcpy(state->result->value.dptr, data.dptr, data.dsize);
+               result->value.dptr = result->key.dptr+key.dsize;
+               memcpy(result->value.dptr, data.dptr, data.dsize);
        }
        else {
-               state->result->value.dptr = NULL;
+               result->value.dptr = NULL;
        }
 
        return 0;
diff --git a/source3/lib/smbd_shim.c b/source3/lib/smbd_shim.c
index 72ae366..a7d386b 100644
--- a/source3/lib/smbd_shim.c
+++ b/source3/lib/smbd_shim.c
@@ -51,15 +51,6 @@ void send_stat_cache_delete_message(struct messaging_context 
*msg_ctx,
        }
 }
 
-NTSTATUS can_delete_directory(struct connection_struct *conn,
-                               const char *dirname)
-{
-       if (shim.can_delete_directory) {
-               return shim.can_delete_directory(conn, dirname);
-       }
-       return NT_STATUS_OK;
-}
-
 bool change_to_root_user(void)
 {
        if (shim.change_to_root_user) {
diff --git a/source3/lib/smbd_shim.h b/source3/lib/smbd_shim.h
index 89cae2b..0b802fe 100644
--- a/source3/lib/smbd_shim.h
+++ b/source3/lib/smbd_shim.h
@@ -35,9 +35,6 @@ struct smbd_shim
        void (*send_stat_cache_delete_message)(struct messaging_context 
*msg_ctx,
                                               const char *name);
 
-       NTSTATUS (*can_delete_directory)(struct connection_struct *conn,
-                                        const char *dirname);
-
        bool (*change_to_root_user)(void);
 
        void (*contend_level2_oplocks_begin)(files_struct *fsp,
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index c1f9943..b0f719b 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -1182,65 +1182,6 @@ bool downgrade_share_oplock(struct share_mode_lock *lck, 
files_struct *fsp)
        return True;
 }
 
-/****************************************************************************
- Check if setting delete on close is allowed on this fsp.
-****************************************************************************/
-
-NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32 dosmode)
-{
-       /*
-        * Only allow delete on close for writable files.
-        */
-
-       if ((dosmode & FILE_ATTRIBUTE_READONLY) &&
-           !lp_delete_readonly(SNUM(fsp->conn))) {
-               DEBUG(10,("can_set_delete_on_close: file %s delete on close "
-                         "flag set but file attribute is readonly.\n",
-                         fsp_str_dbg(fsp)));
-               return NT_STATUS_CANNOT_DELETE;
-       }
-
-       /*
-        * Only allow delete on close for writable shares.
-        */
-
-       if (!CAN_WRITE(fsp->conn)) {
-               DEBUG(10,("can_set_delete_on_close: file %s delete on "
-                         "close flag set but write access denied on share.\n",
-                         fsp_str_dbg(fsp)));
-               return NT_STATUS_ACCESS_DENIED;
-       }
-
-       /*
-        * Only allow delete on close for files/directories opened with delete
-        * intent.
-        */
-
-       if (!(fsp->access_mask & DELETE_ACCESS)) {
-               DEBUG(10,("can_set_delete_on_close: file %s delete on "
-                         "close flag set but delete access denied.\n",
-                         fsp_str_dbg(fsp)));
-               return NT_STATUS_ACCESS_DENIED;
-       }
-
-       /* Don't allow delete on close for non-empty directories. */
-       if (fsp->is_directory) {
-               SMB_ASSERT(!is_ntfs_stream_smb_fname(fsp->fsp_name));
-
-               /* Or the root of a share. */
-               if (ISDOT(fsp->fsp_name->base_name)) {
-                       DEBUG(10,("can_set_delete_on_close: can't set delete on 
"
-                                 "close for the root of a share.\n"));
-                       return NT_STATUS_ACCESS_DENIED;
-               }
-
-               return can_delete_directory(fsp->conn,
-                                           fsp->fsp_name->base_name);
-       }
-
-       return NT_STATUS_OK;
-}
-
 /*************************************************************************
  Return a talloced copy of a struct security_unix_token. NULL on fail.
  (Should this be in locking.c.... ?).
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index b7c8990..5be8acc 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -172,7 +172,6 @@ void del_deferred_open_entry(struct share_mode_lock *lck, 
uint64_t mid,
                             struct server_id pid);
 bool remove_share_oplock(struct share_mode_lock *lck, files_struct *fsp);
 bool downgrade_share_oplock(struct share_mode_lock *lck, files_struct *fsp);
-NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32 dosmode);
 const struct security_unix_token *get_delete_on_close_token(struct 
share_mode_lock *lck, uint32_t name_hash);
 void set_delete_on_close_lck(files_struct *fsp,
                        struct share_mode_lock *lck,
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index a7dc537..63a7887 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -1674,8 +1674,8 @@ bool SearchDir(struct smb_Dir *dirp, const char *name, 
long *poffset)
  Is this directory empty ?
 *****************************************************************/
 
-NTSTATUS smbd_can_delete_directory(struct connection_struct *conn,
-                                  const char *dirname)
+NTSTATUS can_delete_directory(struct connection_struct *conn,
+                             const char *dirname)
 {
        NTSTATUS status = NT_STATUS_OK;
        long dirpos = 0;
diff --git a/source3/smbd/file_access.c b/source3/smbd/file_access.c
index 4a473d7..9fff8e3 100644
--- a/source3/smbd/file_access.c
+++ b/source3/smbd/file_access.c
@@ -170,3 +170,62 @@ bool directory_has_default_acl(connection_struct *conn, 
const char *fname)
        TALLOC_FREE(secdesc);
        return false;
 }
+
+/****************************************************************************
+ Check if setting delete on close is allowed on this fsp.
+****************************************************************************/
+
+NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32 dosmode)
+{
+       /*
+        * Only allow delete on close for writable files.
+        */
+
+       if ((dosmode & FILE_ATTRIBUTE_READONLY) &&
+           !lp_delete_readonly(SNUM(fsp->conn))) {
+               DEBUG(10,("can_set_delete_on_close: file %s delete on close "
+                         "flag set but file attribute is readonly.\n",
+                         fsp_str_dbg(fsp)));
+               return NT_STATUS_CANNOT_DELETE;
+       }
+
+       /*
+        * Only allow delete on close for writable shares.
+        */
+
+       if (!CAN_WRITE(fsp->conn)) {
+               DEBUG(10,("can_set_delete_on_close: file %s delete on "
+                         "close flag set but write access denied on share.\n",
+                         fsp_str_dbg(fsp)));
+               return NT_STATUS_ACCESS_DENIED;
+       }
+
+       /*
+        * Only allow delete on close for files/directories opened with delete
+        * intent.
+        */
+
+       if (!(fsp->access_mask & DELETE_ACCESS)) {
+               DEBUG(10,("can_set_delete_on_close: file %s delete on "
+                         "close flag set but delete access denied.\n",
+                         fsp_str_dbg(fsp)));
+               return NT_STATUS_ACCESS_DENIED;
+       }
+
+       /* Don't allow delete on close for non-empty directories. */
+       if (fsp->is_directory) {
+               SMB_ASSERT(!is_ntfs_stream_smb_fname(fsp->fsp_name));
+
+               /* Or the root of a share. */
+               if (ISDOT(fsp->fsp_name->base_name)) {
+                       DEBUG(10,("can_set_delete_on_close: can't set delete on 
"
+                                 "close for the root of a share.\n"));
+                       return NT_STATUS_ACCESS_DENIED;
+               }
+
+               return can_delete_directory(fsp->conn,
+                                           fsp->fsp_name->base_name);
+       }
+
+       return NT_STATUS_OK;
+}
diff --git a/source3/smbd/globals.c b/source3/smbd/globals.c
index aa17f69..82de70a 100644
--- a/source3/smbd/globals.c
+++ b/source3/smbd/globals.c
@@ -151,7 +151,6 @@ static const struct smbd_shim smbd_shim_fns =
 {
        .cancel_pending_lock_requests_by_fid = 
smbd_cancel_pending_lock_requests_by_fid,
        .send_stat_cache_delete_message = smbd_send_stat_cache_delete_message,
-       .can_delete_directory = smbd_can_delete_directory,
        .change_to_root_user = smbd_change_to_root_user,
 
        .contend_level2_oplocks_begin = smbd_contend_level2_oplocks_begin,
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index a697ee8..ee0ba08 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1548,10 +1548,10 @@ void remove_deferred_open_entry(struct file_id id, 
uint64_t mid,
                        NULL, NULL, NULL);
        if (lck == NULL) {
                DEBUG(0, ("could not get share mode lock\n"));
-       } else {
-               del_deferred_open_entry(lck, mid, pid);
-               TALLOC_FREE(lck);
+               return;
        }
+       del_deferred_open_entry(lck, mid, pid);
+       TALLOC_FREE(lck);
 }
 
 /****************************************************************
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index e0f48b7..daaa914 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -241,8 +241,6 @@ void DirCacheAdd(struct smb_Dir *dirp, const char *name, 
long offset);
 bool SearchDir(struct smb_Dir *dirp, const char *name, long *poffset);
 NTSTATUS can_delete_directory(struct connection_struct *conn,
                                const char *dirname);
-NTSTATUS smbd_can_delete_directory(struct connection_struct *conn,
-                               const char *dirname);
 
 /* The following definitions come from smbd/dmapi.c  */
 
@@ -310,6 +308,7 @@ bool can_delete_file_in_directory(connection_struct *conn,
 bool can_write_to_file(connection_struct *conn,
                       const struct smb_filename *smb_fname);
 bool directory_has_default_acl(connection_struct *conn, const char *fname);
+NTSTATUS can_set_delete_on_close(files_struct *fsp, uint32 dosmode);
 
 /* The following definitions come from smbd/fileio.c  */
 


-- 
Samba Shared Repository

Reply via email to