summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-06-08 10:36:24 +0200
committerStefan Metzmacher <metze@samba.org>2012-06-09 21:23:44 +0200
commit3909ad4690b75ebcfa8c9060435961d7a71e28a6 (patch)
tree9ff430e77e1b1d454ed3603c237ae7230f0add2d
parent2bb6a9e07fd02594987aa33ce21e5bfb5e541193 (diff)
downloadsamba-3909ad4690b75ebcfa8c9060435961d7a71e28a6.tar.gz
samba-3909ad4690b75ebcfa8c9060435961d7a71e28a6.tar.bz2
samba-3909ad4690b75ebcfa8c9060435961d7a71e28a6.zip
s3:smb2_break: make use of file_fsp_smb2()
metze
-rw-r--r--source3/smbd/smb2_break.c45
1 files changed, 13 insertions, 32 deletions
diff --git a/source3/smbd/smb2_break.c b/source3/smbd/smb2_break.c
index 310b24bb39..75505e5ab8 100644
--- a/source3/smbd/smb2_break.c
+++ b/source3/smbd/smb2_break.c
@@ -28,8 +28,8 @@
static struct tevent_req *smbd_smb2_oplock_break_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
- uint8_t in_oplock_level,
- uint64_t in_file_id_volatile);
+ struct files_struct *in_fsp,
+ uint8_t in_oplock_level);
static NTSTATUS smbd_smb2_oplock_break_recv(struct tevent_req *req,
uint8_t *out_oplock_level);
@@ -42,6 +42,7 @@ NTSTATUS smbd_smb2_request_process_break(struct smbd_smb2_request *req)
uint8_t in_oplock_level;
uint64_t in_file_id_persistent;
uint64_t in_file_id_volatile;
+ struct files_struct *in_fsp;
struct tevent_req *subreq;
status = smbd_smb2_request_verify_sizes(req, 0x18);
@@ -62,17 +63,13 @@ NTSTATUS smbd_smb2_request_process_break(struct smbd_smb2_request *req)
in_file_id_persistent = BVAL(inbody, 0x08);
in_file_id_volatile = BVAL(inbody, 0x10);
- if (req->compat_chain_fsp) {
- /* skip check */
- } else if (in_file_id_persistent != in_file_id_volatile) {
+ in_fsp = file_fsp_smb2(req, in_file_id_persistent, in_file_id_volatile);
+ if (in_fsp == NULL) {
return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
}
- subreq = smbd_smb2_oplock_break_send(req,
- req->sconn->ev_ctx,
- req,
- in_oplock_level,
- in_file_id_volatile);
+ subreq = smbd_smb2_oplock_break_send(req, req->sconn->ev_ctx,
+ req, in_fsp, in_oplock_level);
if (subreq == NULL) {
return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY);
}
@@ -148,14 +145,12 @@ struct smbd_smb2_oplock_break_state {
static struct tevent_req *smbd_smb2_oplock_break_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct smbd_smb2_request *smb2req,
- uint8_t in_oplock_level,
- uint64_t in_file_id_volatile)
+ struct files_struct *fsp,
+ uint8_t in_oplock_level)
{
struct tevent_req *req;
struct smbd_smb2_oplock_break_state *state;
struct smb_request *smbreq;
- connection_struct *conn = smb2req->tcon->compat_conn;
- files_struct *fsp = NULL;
int oplocklevel = map_smb2_oplock_levels_to_samba(in_oplock_level);
bool break_to_none = (oplocklevel == NO_OPLOCK);
bool result;
@@ -168,30 +163,16 @@ static struct tevent_req *smbd_smb2_oplock_break_send(TALLOC_CTX *mem_ctx,
state->smb2req = smb2req;
state->out_oplock_level = SMB2_OPLOCK_LEVEL_NONE;
- DEBUG(10,("smbd_smb2_oplock_break_send: file_id[0x%016llX] "
- "samba level %d\n",
- (unsigned long long)in_file_id_volatile,
- oplocklevel));
+ DEBUG(10,("smbd_smb2_oplock_break_send: %s - fnum[%d] "
+ "samba level %d\n",
+ fsp_str_dbg(fsp), fsp->fnum,
+ oplocklevel));
smbreq = smbd_smb2_fake_smb_request(smb2req);
if (tevent_req_nomem(smbreq, req)) {
return tevent_req_post(req, ev);
}
- fsp = file_fsp(smbreq, (uint16_t)in_file_id_volatile);
- if (fsp == NULL) {
- tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);
- return tevent_req_post(req, ev);
- }
- if (conn != fsp->conn) {
- tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);
- return tevent_req_post(req, ev);
- }
- if (smb2req->session->vuid != fsp->vuid) {
- tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);
- return tevent_req_post(req, ev);
- }
-
DEBUG(5,("smbd_smb2_oplock_break_send: got SMB2 oplock break (%u) from client "
"for file %s fnum = %d\n",
(unsigned int)in_oplock_level,