From: Volker Lendecke Date: Thu, 26 Sep 2013 21:32:09 +0000 (-0700) Subject: smbd: Remove "file_existed" handling from open_mode_check X-Git-Url: http://git.samba.org/?p=mat%2Fsamba.git;a=commitdiff_plain;h=4c0cf9fade8e9118c8da31cf3db3a4497321294b smbd: Remove "file_existed" handling from open_mode_check No clue what this does. In open_directory, "dir_existed" is not used after open_mode_check. In open_file_ntcreate it's used, but I can't think of a case right now where we would find a formerly nonexisting file to exist suddenly. Signed-off-by: Volker Lendecke Reviewed-by: Michael Adam --- diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 670de5dff9..aaa42b34a8 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1114,8 +1114,7 @@ static bool has_delete_on_close(struct share_mode_lock *lck, static NTSTATUS open_mode_check(connection_struct *conn, struct share_mode_lock *lck, uint32 access_mask, - uint32 share_access, - bool *file_existed) + uint32 share_access) { int i; @@ -1156,16 +1155,10 @@ static NTSTATUS open_mode_check(connection_struct *conn, continue; } - *file_existed = true; - return NT_STATUS_SHARING_VIOLATION; } } - if (lck->data->num_share_modes != 0) { - *file_existed = true; - } - return NT_STATUS_OK; } @@ -2427,8 +2420,20 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, } status = open_mode_check(conn, lck, - access_mask, share_access, - &file_existed); + access_mask, share_access); + + + if (NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION) || + (lck->data->num_share_modes > 0)) { + /* + * This comes from ancient times out of open_mode_check. I + * have no clue whether this is still necessary. I can't think + * of a case where this would actually matter further down in + * this function. I leave it here for further investigation + * :-) + */ + file_existed = true; + } if (NT_STATUS_IS_OK(status)) { /* We might be going to allow this open. Check oplock @@ -3159,8 +3164,7 @@ static NTSTATUS open_directory(connection_struct *conn, } status = open_mode_check(conn, lck, - access_mask, share_access, - &dir_existed); + access_mask, share_access); if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(lck);