Changeset 751 for trunk/server/source3/smbd/smb2_negprot.c
- Timestamp:
- Nov 29, 2012, 1:59:04 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server/source3/smbd/smb2_negprot.c
r745 r751 62 62 NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req) 63 63 { 64 NTSTATUS status; 64 65 const uint8_t *inbody; 65 66 const uint8_t *indyn = NULL; … … 70 71 uint16_t security_offset; 71 72 DATA_BLOB security_buffer; 72 size_t expected_body_size = 0x24;73 size_t body_size;74 73 size_t expected_dyn_size = 0; 75 74 size_t c; … … 78 77 uint16_t dialect = 0; 79 78 uint32_t capabilities; 79 uint32_t max_limit; 80 uint32_t max_trans = lp_smb2_max_trans(); 81 uint32_t max_read = lp_smb2_max_read(); 82 uint32_t max_write = lp_smb2_max_write(); 80 83 81 /* TODO: drop the connection with INVALID_PARAMETER */ 82 83 if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) { 84 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER); 84 status = smbd_smb2_request_verify_sizes(req, 0x24); 85 if (!NT_STATUS_IS_OK(status)) { 86 return smbd_smb2_request_error(req, status); 85 87 } 86 87 88 inbody = (const uint8_t *)req->in.vector[i+1].iov_base; 88 89 body_size = SVAL(inbody, 0x00);90 if (body_size != expected_body_size) {91 return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);92 }93 89 94 90 dialect_count = SVAL(inbody, 0x02); … … 140 136 } 141 137 138 /* 139 * Unless we implement SMB2_CAP_LARGE_MTU, 140 * 0x10000 (65536) is the maximum allowed message size 141 */ 142 max_limit = 0x10000; 143 144 max_trans = MIN(max_limit, max_trans); 145 max_read = MIN(max_limit, max_read); 146 max_write = MIN(max_limit, max_write); 147 142 148 security_offset = SMB2_HDR_BODY + 0x40; 143 149 … … 165 171 SIVAL(outbody.data, 0x18, 166 172 capabilities); /* capabilities */ 167 SIVAL(outbody.data, 0x1C, lp_smb2_max_trans()); /* max transact size */168 SIVAL(outbody.data, 0x20, lp_smb2_max_read()); /* max read size */169 SIVAL(outbody.data, 0x24, lp_smb2_max_write()); /* max write size */173 SIVAL(outbody.data, 0x1C, max_trans); /* max transact size */ 174 SIVAL(outbody.data, 0x20, max_trans); /* max read size */ 175 SIVAL(outbody.data, 0x24, max_trans); /* max write size */ 170 176 SBVAL(outbody.data, 0x28, 0); /* system time */ 171 177 SBVAL(outbody.data, 0x30, 0); /* server start time */ … … 179 185 180 186 req->sconn->using_smb2 = true; 187 req->sconn->smb2.max_trans = max_trans; 188 req->sconn->smb2.max_read = max_read; 189 req->sconn->smb2.max_write = max_write; 181 190 182 191 return smbd_smb2_request_done(req, outbody, &outdyn);
Note:
See TracChangeset
for help on using the changeset viewer.