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_close.c

    r745 r751  
    2525
    2626static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req,
     27                                struct files_struct *fsp,
    2728                                uint16_t in_flags,
    28                                 uint64_t in_file_id_volatile,
    2929                                DATA_BLOB *outbody);
    3030
    3131NTSTATUS smbd_smb2_request_process_close(struct smbd_smb2_request *req)
    3232{
    33         const uint8_t *inhdr;
    3433        const uint8_t *inbody;
    3534        int i = req->current_idx;
    3635        uint8_t *outhdr;
    3736        DATA_BLOB outbody;
    38         size_t expected_body_size = 0x18;
    39         size_t body_size;
    4037        uint16_t in_flags;
    4138        uint64_t in_file_id_persistent;
    4239        uint64_t in_file_id_volatile;
     40        struct files_struct *in_fsp;
    4341        NTSTATUS status;
    4442
    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);
     43        status = smbd_smb2_request_verify_sizes(req, 0x18);
     44        if (!NT_STATUS_IS_OK(status)) {
     45                return smbd_smb2_request_error(req, status);
    4846        }
    49 
    5047        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         }
    5648
    5749        outbody = data_blob_talloc(req->out.vector, NULL, 0x3C);
     
    6456        in_file_id_volatile     = BVAL(inbody, 0x10);
    6557
    66         if (req->compat_chain_fsp) {
    67                 /* skip check */
    68         } else if (in_file_id_persistent != in_file_id_volatile) {
     58        in_fsp = file_fsp_smb2(req, in_file_id_persistent, in_file_id_volatile);
     59        if (in_fsp == NULL) {
    6960                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
    7061        }
    7162
    7263        status = smbd_smb2_close(req,
     64                                in_fsp,
    7365                                in_flags,
    74                                 in_file_id_volatile,
    7566                                &outbody);
    7667        if (!NT_STATUS_IS_OK(status)) {
     
    8374
    8475static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req,
     76                                struct files_struct *fsp,
    8577                                uint16_t in_flags,
    86                                 uint64_t in_file_id_volatile,
    8778                                DATA_BLOB *outbody)
    8879{
     
    9081        struct smb_request *smbreq;
    9182        connection_struct *conn = req->tcon->compat_conn;
    92         files_struct *fsp;
    9383        struct smb_filename *smb_fname = NULL;
    9484        struct timespec mdate_ts, adate_ts, cdate_ts, create_date_ts;
     
    10494        ZERO_STRUCT(cdate_ts);
    10595
    106         DEBUG(10,("smbd_smb2_close: file_id[0x%016llX]\n",
    107                   (unsigned long long)in_file_id_volatile));
     96        DEBUG(10,("smbd_smb2_close: %s - fnum[%d]\n",
     97                  fsp_str_dbg(fsp), fsp->fnum));
    10898
    10999        smbreq = smbd_smb2_fake_smb_request(req);
    110100        if (smbreq == NULL) {
    111101                return NT_STATUS_NO_MEMORY;
    112         }
    113 
    114         fsp = file_fsp(smbreq, (uint16_t)in_file_id_volatile);
    115         if (fsp == NULL) {
    116                 return NT_STATUS_FILE_CLOSED;
    117         }
    118         if (conn != fsp->conn) {
    119                 return NT_STATUS_FILE_CLOSED;
    120         }
    121         if (req->session->vuid != fsp->vuid) {
    122                 return NT_STATUS_FILE_CLOSED;
    123102        }
    124103
Note: See TracChangeset for help on using the changeset viewer.