Ignore:
Timestamp:
Nov 29, 2012, 1:59:04 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.9

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/server/source3/smbd/smb2_flush.c

    r745 r751  
    2828                                               struct tevent_context *ev,
    2929                                               struct smbd_smb2_request *smb2req,
    30                                                uint64_t in_file_id_volatile);
     30                                               struct files_struct *fsp);
    3131static NTSTATUS smbd_smb2_flush_recv(struct tevent_req *req);
    3232
     
    3434NTSTATUS smbd_smb2_request_process_flush(struct smbd_smb2_request *req)
    3535{
    36         const uint8_t *inhdr;
     36        NTSTATUS status;
    3737        const uint8_t *inbody;
    3838        int i = req->current_idx;
    39         size_t expected_body_size = 0x18;
    40         size_t body_size;
    4139        uint64_t in_file_id_persistent;
    4240        uint64_t in_file_id_volatile;
     41        struct files_struct *in_fsp;
    4342        struct tevent_req *subreq;
    4443
    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);
    4847        }
    49 
    5048        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         }
    5649
    5750        in_file_id_persistent   = BVAL(inbody, 0x08);
    5851        in_file_id_volatile     = BVAL(inbody, 0x10);
    5952
    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) {
    6355                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
    6456        }
    6557
    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);
    7060        if (subreq == NULL) {
    7161                return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY);
     
    9686        }
    9787
    98         outbody = data_blob_talloc(req->out.vector, NULL, 0x10);
     88        outbody = data_blob_talloc(req->out.vector, NULL, 0x04);
    9989        if (outbody.data == NULL) {
    10090                error = smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY);
     
    125115                                               struct tevent_context *ev,
    126116                                               struct smbd_smb2_request *smb2req,
    127                                                uint64_t in_file_id_volatile)
     117                                               struct files_struct *fsp)
    128118{
    129119        struct tevent_req *req;
     
    131121        NTSTATUS status;
    132122        struct smb_request *smbreq;
    133         files_struct *fsp;
    134123
    135124        req = tevent_req_create(mem_ctx, &state,
     
    140129        state->smb2req = smb2req;
    141130
    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));
    144133
    145134        smbreq = smbd_smb2_fake_smb_request(smb2req);
     
    150139        if (IS_IPC(smbreq->conn)) {
    151140                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);
    166141                return tevent_req_post(req, ev);
    167142        }
Note: See TracChangeset for help on using the changeset viewer.