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

    r745 r751  
    101101        const uint8_t *inbody;
    102102        int i = smb2req->current_idx;
    103         size_t expected_body_size = 0x39;
    104         size_t body_size;
    105103        uint8_t in_oplock_level;
    106104        uint32_t in_impersonation_level;
     
    128126        struct tevent_req *tsubreq;
    129127
    130         if (smb2req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
    131                 return smbd_smb2_request_error(smb2req, NT_STATUS_INVALID_PARAMETER);
    132         }
    133 
     128        status = smbd_smb2_request_verify_sizes(smb2req, 0x39);
     129        if (!NT_STATUS_IS_OK(status)) {
     130                return smbd_smb2_request_error(smb2req, status);
     131        }
    134132        inbody = (const uint8_t *)smb2req->in.vector[i+1].iov_base;
    135 
    136         body_size = SVAL(inbody, 0x00);
    137         if (body_size != expected_body_size) {
    138                 return smbd_smb2_request_error(smb2req, NT_STATUS_INVALID_PARAMETER);
    139         }
    140133
    141134        in_oplock_level         = CVAL(inbody, 0x03);
     
    159152         */
    160153
    161         dyn_offset = SMB2_HDR_BODY + (body_size & 0xFFFFFFFE);
     154        dyn_offset = SMB2_HDR_BODY + smb2req->in.vector[i+1].iov_len;
    162155
    163156        if (in_name_offset == 0 && in_name_length == 0) {
     
    218211        if (!ok) {
    219212                return smbd_smb2_request_error(smb2req, NT_STATUS_ILLEGAL_CHARACTER);
     213        }
     214
     215        if (in_name_buffer.length == 0) {
     216                in_name_string_size = 0;
     217        }
     218
     219        if (strlen(in_name_string) != in_name_string_size) {
     220                return smbd_smb2_request_error(smb2req, NT_STATUS_OBJECT_NAME_INVALID);
    220221        }
    221222
     
    386387        struct smbd_smb2_request *smb2req;
    387388        struct smb_request *smb1req;
     389        bool open_was_deferred;
    388390        struct timed_event *te;
    389391        struct tevent_immediate *im;
     
    538540                if (exta) {
    539541                        if (dhnc) {
    540                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     542                                tevent_req_nterror(req,NT_STATUS_OBJECT_NAME_NOT_FOUND);
    541543                                return tevent_req_post(req, ev);
    542544                        }
     
    553555                if (mxac) {
    554556                        if (dhnc) {
    555                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     557                                tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
    556558                                return tevent_req_post(req, ev);
    557559                        }
     
    571573
    572574                        if (dhnc) {
    573                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     575                                tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
    574576                                return tevent_req_post(req, ev);
    575577                        }
     
    593595                if (dhnq) {
    594596                        if (dhnc) {
    595                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     597                                tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
    596598                                return tevent_req_post(req, ev);
    597599                        }
     
    619621                if (alsi) {
    620622                        if (dhnc) {
    621                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     623                                tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
    622624                                return tevent_req_post(req, ev);
    623625                        }
     
    636638
    637639                        if (dhnc) {
    638                                 tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
     640                                tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
    639641                                return tevent_req_post(req, ev);
    640642                        }
     
    821823                                        result->fsp_name));
    822824        state->out_allocation_size =
    823                         result->fsp_name->st.st_ex_blksize *
    824                         result->fsp_name->st.st_ex_blocks;
     825                        SMB_VFS_GET_ALLOC_SIZE(smb1req->conn, result,
     826                                               &(result->fsp_name->st));
    825827        state->out_end_of_file = result->fsp_name->st.st_ex_size;
    826828        if (state->out_file_attributes == 0) {
    827829                state->out_file_attributes = FILE_ATTRIBUTE_NORMAL;
    828830        }
    829         state->out_file_id_persistent = result->fnum;
     831        state->out_file_id_persistent = fsp_persistent_id(result);
    830832        state->out_file_id_volatile = result->fnum;
    831833        state->out_context_blobs = out_context_blobs;
     
    964966        }
    965967        /* It's not in progress if there's no timeout event. */
    966         if (!state->te) {
     968        if (!state->open_was_deferred) {
    967969                return false;
    968970        }
     
    995997                (unsigned long long)mid ));
    996998
     999        state->open_was_deferred = false;
    9971000        /* Ensure we don't have any outstanding timer event. */
    9981001        TALLOC_FREE(state->te);
     
    12381241                                true) ));
    12391242
     1243        state->open_was_deferred = true;
    12401244        state->te = event_add_timed(smb2req->sconn->smb2.event_ctx,
    12411245                                state,
Note: See TracChangeset for help on using the changeset viewer.