From f2d364ebe69fc5d624e456cc7d941071811a5567 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 6 Feb 2007 18:16:10 +0000 Subject: [PATCH] r21183: Commit the big/little endian fix for nttrans setup[] handling. Please check! For code symmetry reasons, trans2 might also see this fix, but this is left to the interested reader :-) Volker --- source/libcli/raw/rawtrans.c | 6 ++---- source/smb_server/smb/nttrans.c | 7 +++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/source/libcli/raw/rawtrans.c b/source/libcli/raw/rawtrans.c index cd309e0736b..08d7483a872 100644 --- a/source/libcli/raw/rawtrans.c +++ b/source/libcli/raw/rawtrans.c @@ -555,7 +555,6 @@ struct smbcli_request *smb_raw_nttrans_send(struct smbcli_tree *tree, { struct smbcli_request *req; uint8_t *outdata, *outparam; - int i; int align = 0; /* only align if there are parameters or data */ @@ -592,9 +591,8 @@ struct smbcli_request *smb_raw_nttrans_send(struct smbcli_tree *tree, SIVAL(req->out.vwv, 31, PTR_DIFF(outdata,req->out.hdr)); SCVAL(req->out.vwv, 35, parms->in.setup_count); SSVAL(req->out.vwv, 36, parms->in.function); - for (i=0;iin.setup_count;i++) { - SSVAL(req->out.vwv,VWV(19+i),parms->in.setup[i]); - } + memcpy(req->out.vwv + VWV(19), parms->in.setup, + sizeof(uint16_t) * parms->in.setup_count); if (parms->in.params.length) { memcpy(outparam, parms->in.params.data, parms->in.params.length); } diff --git a/source/smb_server/smb/nttrans.c b/source/smb_server/smb/nttrans.c index fce4fdc1293..e85da29806b 100644 --- a/source/smb_server/smb/nttrans.c +++ b/source/smb_server/smb/nttrans.c @@ -570,7 +570,6 @@ void smbsrv_reply_nttrans(struct smbsrv_request *req) { struct nttrans_op *op; struct smb_nttrans *trans; - int i; uint16_t param_ofs, data_ofs; uint16_t param_count, data_count; uint16_t param_total, data_total; @@ -617,9 +616,9 @@ void smbsrv_reply_nttrans(struct smbsrv_request *req) smbsrv_send_error(req, NT_STATUS_NO_MEMORY); return; } - for (i=0;iin.setup_count;i++) { - trans->in.setup[i] = SVAL(req->in.vwv, VWV(19+i)); - } + + memcpy(trans->in.setup, (char *)(req->in.vwv) + VWV(19), + sizeof(uint16_t) * trans->in.setup_count); if (!req_pull_blob(req, req->in.hdr + param_ofs, param_count, &trans->in.params) || !req_pull_blob(req, req->in.hdr + data_ofs, data_count, &trans->in.data)) { -- 2.34.1