commit 5c46d98dec610a9a843f5913feaa02c902762db7 Author: Ira Cooper Date: Tue Jun 8 13:27:58 2010 -0400 s3: Duplicate smb2 requests correctly. This fixes an issue where incorrect replies to create were being seen. diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index df25570..ee56784 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -539,23 +539,14 @@ static struct smbd_smb2_request *dup_smb2_req(const struct smbd_smb2_request *re } outvec[i].iov_len = SMB2_HDR_BODY; - outvec[i+1].iov_base = ((uint8_t *)outvec[i].iov_base) + - SMB2_HDR_BODY; - outvec[i+1].iov_len = 8; + if (!dup_smb2_vec(outvec, req->out.vector, i+1)) { + break; + } - if (req->out.vector[i+2].iov_base == - ((uint8_t *)req->out.vector[i].iov_base) + - (OUTVEC_ALLOC_SIZE - 1) && - req->out.vector[i+2].iov_len == 1) { - /* Common SMB2 error packet case. */ - outvec[i+2].iov_base = ((uint8_t *)outvec[i].iov_base) + - (OUTVEC_ALLOC_SIZE - 1); - outvec[i+2].iov_len = 1; - } else if (!dup_smb2_vec(outvec, - req->out.vector, - i)) { + if (!dup_smb2_vec(outvec, req->out.vector, i+2)) { break; } + } if (i < count) {