Changeset 751 for trunk/server/source3/smbd/smb2_flush.c
- Timestamp:
- Nov 29, 2012, 1:59:04 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server/source3/smbd/smb2_flush.c
r745 r751 28 28 struct tevent_context *ev, 29 29 struct smbd_smb2_request *smb2req, 30 uint64_t in_file_id_volatile);30 struct files_struct *fsp); 31 31 static NTSTATUS smbd_smb2_flush_recv(struct tevent_req *req); 32 32 … … 34 34 NTSTATUS smbd_smb2_request_process_flush(struct smbd_smb2_request *req) 35 35 { 36 const uint8_t *inhdr;36 NTSTATUS status; 37 37 const uint8_t *inbody; 38 38 int i = req->current_idx; 39 size_t expected_body_size = 0x18;40 size_t body_size;41 39 uint64_t in_file_id_persistent; 42 40 uint64_t in_file_id_volatile; 41 struct files_struct *in_fsp; 43 42 struct tevent_req *subreq; 44 43 45 inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;46 if ( req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {47 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);44 status = smbd_smb2_request_verify_sizes(req, 0x18); 45 if (!NT_STATUS_IS_OK(status)) { 46 return smbd_smb2_request_error(req, status); 48 47 } 49 50 48 inbody = (const uint8_t *)req->in.vector[i+1].iov_base; 51 52 body_size = SVAL(inbody, 0x00);53 if (body_size != expected_body_size) {54 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);55 }56 49 57 50 in_file_id_persistent = BVAL(inbody, 0x08); 58 51 in_file_id_volatile = BVAL(inbody, 0x10); 59 52 60 if (req->compat_chain_fsp) { 61 /* skip check */ 62 } else if (in_file_id_persistent != in_file_id_volatile) { 53 in_fsp = file_fsp_smb2(req, in_file_id_persistent, in_file_id_volatile); 54 if (in_fsp == NULL) { 63 55 return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED); 64 56 } 65 57 66 subreq = smbd_smb2_flush_send(req, 67 req->sconn->smb2.event_ctx, 68 req, 69 in_file_id_volatile); 58 subreq = smbd_smb2_flush_send(req, req->sconn->smb2.event_ctx, 59 req, in_fsp); 70 60 if (subreq == NULL) { 71 61 return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY); … … 96 86 } 97 87 98 outbody = data_blob_talloc(req->out.vector, NULL, 0x 10);88 outbody = data_blob_talloc(req->out.vector, NULL, 0x04); 99 89 if (outbody.data == NULL) { 100 90 error = smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY); … … 125 115 struct tevent_context *ev, 126 116 struct smbd_smb2_request *smb2req, 127 uint64_t in_file_id_volatile)117 struct files_struct *fsp) 128 118 { 129 119 struct tevent_req *req; … … 131 121 NTSTATUS status; 132 122 struct smb_request *smbreq; 133 files_struct *fsp;134 123 135 124 req = tevent_req_create(mem_ctx, &state, … … 140 129 state->smb2req = smb2req; 141 130 142 DEBUG(10,("smbd_smb2_flush: file_id[0x%016llX]\n",143 (unsigned long long)in_file_id_volatile));131 DEBUG(10,("smbd_smb2_flush: %s - fnum[%d]\n", 132 fsp_str_dbg(fsp), fsp->fnum)); 144 133 145 134 smbreq = smbd_smb2_fake_smb_request(smb2req); … … 150 139 if (IS_IPC(smbreq->conn)) { 151 140 tevent_req_nterror(req, NT_STATUS_NOT_IMPLEMENTED); 152 return tevent_req_post(req, ev);153 }154 155 fsp = file_fsp(smbreq, (uint16_t)in_file_id_volatile);156 if (fsp == NULL) {157 tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);158 return tevent_req_post(req, ev);159 }160 if (smbreq->conn != fsp->conn) {161 tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);162 return tevent_req_post(req, ev);163 }164 if (smb2req->session->vuid != fsp->vuid) {165 tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);166 141 return tevent_req_post(req, ev); 167 142 }
Note:
See TracChangeset
for help on using the changeset viewer.